【问题标题】:GCP Firestore array-container unexpected behaviorGCP Firestore 阵列容器意外行为
【发布时间】:2019-09-30 08:28:52
【问题描述】:

使用文档here 中指定的array-contains 对Firestore 集合运行复合查询:

这是我的查询:

db.collection(COLLECTION_NAME)
  .where('organization.id', '==', orgId)
  .where('type', '==', type)
  .where('employeeIds', 'array-contains', employeeId)
  .get()

这不会返回匹配项。你知道array-contains是否只能单独使用,不能与其他AND过滤器一起使用吗?

这方面几乎没有明确的文档和示例。

最好的

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    这不会返回匹配项。你知道数组包含是否只能单独使用而不能与其他 AND 过滤器一起使用吗?

    array-contains 与其他相等== 运算符结合使用并没有错。您可以使用一次array-contains,但您可以链接任意数量的相等函数。如果您的db.collection(COLLECTION_NAME) 指向正确的位置并且orgIdtypeemployeeId 保持正确的值,您的查询应该可以正常工作。此外,在大多数情况下,这种查询不起作用,因为许多开发人员试图对结果进行排序。在这种情况下,请记住index 是必需的。

    【讨论】:

    • 感谢您的确认。这些也正是我的想法。我发现,当我将 db.collection 定义为一个变量,然后有条件地构建其他 where(例如 if(this==that) ref.where(... add array-contains) 时,查询不起作用。新行为,需要习惯这一点。谢谢
    • 不客气。另请注意,Firestore 查询是不可变的,这意味着您无法更改现有查询的属性。如果您使用array-contains== 更改该值,它将成为一个新查询。因此,您始终需要将所有新调用存储到 Query 对象中
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2020-11-10
    相关资源
    最近更新 更多