【问题标题】:Firebase firestore query for two arrays两个数组的 Firebase Firestore 查询
【发布时间】:2021-03-29 17:30:45
【问题描述】:

我在 firestore 中有下一个数据结构:

{
  "votes_yes":[
    "id1",
    "id2",
    "id3",
    ...
  ],
  "votes_no":[
    "id4",
    "id5",
    "id6",
    ...
  ],
}

我想构建一个查询,它将返回用户投票的文档列表。 为此,我需要检查他的 id 是否存在于其中一个数组中。

array-contains 的帮助下,我可以轻松地为一个数组做到这一点:

ref.where('votes_yes', 'array-contains', `userId`).get()

但是可以为array-containslogical OR 吗?

我在doc 中没有发现任何有用的东西... :(

【问题讨论】:

    标签: javascript arrays firebase google-cloud-firestore


    【解决方案1】:

    doc you linked to 告诉你你需要知道什么:

    请注意以下对 in、not-in 和 array-contains-any 的限制:

    • in、not-in 和 array-contains-any 支持最多 10 个比较值。
    • 每个查询最多可以使用一个 array-contains 子句。您不能将 array-contains 与 array-contains-any 结合使用。
    • 每个查询最多可以使用一个 in、not-in 或 array-contains-any 子句。您不能在同一个查询中组合这些运算符。
    • 您不能将 not-in 与不等于 != 结合使用。 您不能按包含在等式 (==) 或 in 子句中的字段对查询进行排序。

    我将阻止您在每个查询中使用多个数组包含的限制加粗。最重要的是,Firestore doesn't support logical OR between multiple different fields,无论你在做什么类型的查询。

    执行您所要求的唯一方法是执行多个查询并使用您自己的逻辑在您的应用中组合结果以确定哪些文档满足这两个条件。

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2023-03-14
      • 2018-05-18
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多