我正在开发一款小型应用程序,该应用程序允许用户根据他们在视图中选择的各种过滤器浏览项目。
不过,在查看了firebase文档后,我意识到我试图创建的那种复合查询是不可能的,因为Firestore只支持单个";IN";每个查询的运算符。为了解决这个问题,文档建议使用多个单独的查询,然后在客户端合并结果。
https://firebase.google.com/docs/firestore/query-data/queries#query_limitations
Cloud Firestore为逻辑OR查询提供了有限的支持。in和数组包含的任何运算符都支持最多10个相等(==(的逻辑OR,或者数组包含单个字段上的条件。对于其他情况,请为每个OR条件创建一个单独的查询,并在应用程序中合并查询结果。
我可以看到这将如何正常工作,但如果我只想向用户显示每页10个结果,会怎么样。既然我不想每次都向用户发送大量结果,我该如何实现分页?
我的第一个想法是对每个单独的查询进行分页,然后合并它们,但如果我只从数据库中得到一个小样本,我不确定如何将它们与客户端的其他查询进行比较和合并。
任何帮助都将不胜感激,因为我希望我不必离开firestore,在SQL数据库中重新开始。
假设您想在一个页面上显示10个结果。您需要为每个子查询获得10个结果,然后在客户端合并结果。您将高估相当多的数据,但不幸的是,在这样的实现中,这是不可避免的。
(首选(替代方案通常是找到一个数据模型,该模型允许您使用单个查询来实现用例。不可能笼统地说明如何做到这一点,但通常需要为OR条件添加一个字段。
假设你想得到所有的结果;字段A";是";红色";或";字段B";是";蓝色";。通过添加字段";fieldA_ is_Red_;,然后可以对该字段执行单个查询。在这个例子中,这可能看起来很做作,但在许多用例中,这更合理,并且可能是用单个查询实现OR用例的好方法。
您只需创建一个复杂的where
查看中的where
属性https://www.npmjs.com/package/firebase-firestore-helper
免责声明:我是这个图书馆的创建者。它有助于操作Firebase Firestore中的对象(并添加Cache(
享受吧!