【问题标题】:Firestore OR queryFirestore OR 查询
【发布时间】:2021-04-27 19:00:46
【问题描述】:

假设我在 Firestore 中有一个包含以下格式对象的集合:

{
  /* ... */
  ownerId: "id-1",
  memberIds: [
    "id-2",
    "id-3",
    "id-4"
  ]
}

如何在 Firestore 中查询 id-1 字段中存在字符串 id-1 的所有文档OR memberIds 字段?

我只找到了 AND 查询,如下所示:

return collection('whatever')
  .where('memberIds', 'array-contains', 'id-1')
  .where('ownerId', '==', 'id-1');

但那些只会返回我id-1 包含在两个 ownerId 字段和memberIds 数组中的文档。

我知道我可以执行多个查询并加入结果,但这会使分页和排序变得非常麻烦。

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    在 Firestore 中不可能像您描述的那样执行 OR 查询。

    一种解决方案是对您的数据进行非规范化(NoSQL 世界中一种非常常见的方法)并在文档中添加一个“连接”其他两个字段的额外字段,如下所示:

    {
      /* ... */
      ownerId: "id-1",
      memberIds: [
        "id-2",
        "id-3",
        "id-4"
      ],
      ownersAndMemberIds: [
        "id-1", 
        "id-2",
        "id-3",
        "id-4"
      ]
    }
    

    然后您可以轻松地查询文档

    return collection('whatever')
      .where('ownersAndMemberIds', 'array-contains', 'id-1');
    

    当然,它要求您保持这个数组与其他字段对齐,但这并不难。您可以在更新两个“主要”字段之一时从前端执行此操作,也可以通过对文档进行任何更改时触发的云函数来执行此操作。

    【讨论】:

    • 云函数方法是一个非常好的主意,谢谢!
    猜你喜欢
    • 2018-03-25
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多