【问题标题】:Google Cloud Firestore 'in' Operator WorkaroundGoogle Cloud Firestore 'in' Operator 解决方法
【发布时间】:2020-09-12 12:39:48
【问题描述】:

我正在使用 google cloud firestore 作为 Flutter 应用程序的数据库。我的代码要求我向数据库发出一个包含 '.where("X", "in", "very-long-list")' 的请求。出现的问题是“in”运算符最多只能组合 10 个相等子句,而我的列表的长度可变,最终可能远大于 10。我正在寻找可能的解决方法。

示例语句:

citiesRef.where("state", "in", "[list-of-1000]");

编辑:为了提供额外的背景信息,我的项目是一个用户有朋友的社交媒体应用程序。数据库将被重组,使得用户文档有一个子集合“朋友”,其中包含他们的用户 ID。用户文档还有一个称为帖子的集合,其中引用了按时间顺序排列的帖子集合。在帖子集合中,每个帖子文档都有一个包含其 UID 的文档。要创建用户的提要,将使用 '.where["UID", "in", ["List-of_friend-UIDs"])' 引用和过滤帖子集合。如果您知道更好的结构,我非常愿意重组我的数据库。

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    如果您必须在“in”查询中使用超过 10 个项目,则需要将其分解为 10 个更小的列表,对每批 10 个执行 1 个查询,然后合并结果。

    【讨论】:

    • 我在帖子中提供了更多背景信息,以更好地解释我的项目。这个解决方案的困难在于我打算使用流来获取帖子对象,并且合并一批流可能会导致排序问题,因为帖子在帖子文档中是按时间顺序排列的。
    • 我的回答并没有真正改变。您将需要执行多个查询。您可以在之后对结果进行排序。
    • 这是否意味着我需要获取每个符合条件的帖子(可能有数千个),然后在客户端对其进行排序?这是唯一的方法吗?我对这种方法的担忧是它在客户端看起来很慢且资源密集。
    • 除非您有另一种方式来识别每个文档,这种方式与 Firestore 的查询功能兼容。如果你不能,那么就知道对 1000 件事情进行排序不会超过几毫秒。
    • 谢谢,这非常有用。我将在小部件构建时提出我的请求并对结果进行排序,而不是使用流
    猜你喜欢
    • 2019-04-23
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2019-03-25
    相关资源
    最近更新 更多