组合多个 Firestore 查询以获得特定结果(带分页)
Combining multiple Firestore queries to get specific results (with pagination)
我正在开发一个小应用程序,允许用户根据他们在视图中 select 的各种过滤器浏览项目。
在查看 firebase 文档后,我意识到我尝试创建的那种复合查询是不可能的,因为 Firestore 每个查询只支持一个“IN”运算符。为了解决这个问题,文档说使用多个单独的查询,然后在客户端合并结果。
https://firebase.google.com/docs/firestore/query-data/queries#query_limitations
Cloud Firestore provides limited support for logical OR queries. The in, and array-contains-any operators support a logical OR of up to 10 equality (==) or array-contains conditions on a single field. For other cases, create a separate query for each OR condition and merge the query results in your app.
我知道这将如何正常工作,但如果我只想向用户显示每页十个结果怎么办。我将如何实现分页,因为我不想每次都将大量结果发送回给用户?
我的第一个想法是对每个单独的查询进行分页,然后将它们合并,但是如果我只从数据库中得到一个小样本,我不确定如何将它们与其他查询进行比较和合并在客户端。
任何帮助将不胜感激,因为我希望我不必离开 firestore 并在 SQL 数据库中重新开始。
假设您想在一个页面上显示 10 个结果。您需要为每个子查询获取 10 个结果,然后在客户端合并结果。您会过度阅读大量数据,但不幸的是,在这样的实现中这是不可避免的。
(首选)替代方法通常是找到一个数据模型,允许您使用单个查询来实现用例。不可能笼统地说出如何做到这一点,但它通常涉及为 OR 条件添加一个字段。
假设您想要获得“fieldA”为“红色”或“fieldB”为“蓝色”的所有结果。通过添加字段“fieldA_is_Red_or_fieldB_is_Blue”,您可以在该字段上执行单个查询。在此示例中,这似乎是人为设计的,但在许多用例中,它更合理,并且可能是使用单个查询实现 OR 用例的好方法。
您可以创建一个复合体 where
看看 where
属性 https://www.npmjs.com/package/firebase-firestore-helper
免责声明:我是这个库的创建者。它有助于在 Firebase Firestore 中操作对象(并添加缓存)
尽情享受吧!
我正在开发一个小应用程序,允许用户根据他们在视图中 select 的各种过滤器浏览项目。
在查看 firebase 文档后,我意识到我尝试创建的那种复合查询是不可能的,因为 Firestore 每个查询只支持一个“IN”运算符。为了解决这个问题,文档说使用多个单独的查询,然后在客户端合并结果。
https://firebase.google.com/docs/firestore/query-data/queries#query_limitations
Cloud Firestore provides limited support for logical OR queries. The in, and array-contains-any operators support a logical OR of up to 10 equality (==) or array-contains conditions on a single field. For other cases, create a separate query for each OR condition and merge the query results in your app.
我知道这将如何正常工作,但如果我只想向用户显示每页十个结果怎么办。我将如何实现分页,因为我不想每次都将大量结果发送回给用户?
我的第一个想法是对每个单独的查询进行分页,然后将它们合并,但是如果我只从数据库中得到一个小样本,我不确定如何将它们与其他查询进行比较和合并在客户端。
任何帮助将不胜感激,因为我希望我不必离开 firestore 并在 SQL 数据库中重新开始。
假设您想在一个页面上显示 10 个结果。您需要为每个子查询获取 10 个结果,然后在客户端合并结果。您会过度阅读大量数据,但不幸的是,在这样的实现中这是不可避免的。
(首选)替代方法通常是找到一个数据模型,允许您使用单个查询来实现用例。不可能笼统地说出如何做到这一点,但它通常涉及为 OR 条件添加一个字段。
假设您想要获得“fieldA”为“红色”或“fieldB”为“蓝色”的所有结果。通过添加字段“fieldA_is_Red_or_fieldB_is_Blue”,您可以在该字段上执行单个查询。在此示例中,这似乎是人为设计的,但在许多用例中,它更合理,并且可能是使用单个查询实现 OR 用例的好方法。
您可以创建一个复合体 where
看看 where
属性 https://www.npmjs.com/package/firebase-firestore-helper
免责声明:我是这个库的创建者。它有助于在 Firebase Firestore 中操作对象(并添加缓存)
尽情享受吧!