【问题标题】:How to get documents with specific id in different collections efficiently in Cloud Firestore?如何在 Cloud Firestore 中有效地获取不同集合中具有特定 ID 的文档?
【发布时间】:2021-02-01 16:06:10
【问题描述】:

我试图在我的数据库中获取多个使用相同 ID 创建的文档。我知道使用collectionGroup 和下面提供的代码是可能的,但我正在寻找一种可能更有效、更清洁的方法。

我已阅读此问题How to perform collection group query using document ID in Cloud Firestore,表明必须将 id 存储在字段中以使用 collectionGroup 查找文档。

在我的例子中,带有myId 的文档可以位于两个不同的集合中,所以我想避免使用collectionGroup,因为我必须像这样在两个单独的集合中这样做:

const collectionOneDocs = await firestoreInstance.get().collectionGroup('collectionOne').where('id', '==', myId).get();
const collectionTwoDocs = await firestoreInstance.get().collectionGroup('collectionTwo').where('id', '==', myId).get();

此代码适用于我,但我想执行单个操作来访问文档,同时避免将 id 保存为文档中的字段,因为它并不是真正必要的。那么无论如何,在 firestore 中是否可以找到具有特定 id 的所有文档,或者这已经是 firestore 可用的最佳解决方案了吗?

非常感谢!

【问题讨论】:

  • 在下面回答。但我不确定我是否理解您为什么不想拥有一个集合组。它们存在的全部目的是让您可以通过为它们提供相同的名称来跨多个集合进行查询。
  • @FrankvanPuffelen 感谢您的回答。我理解他们的目的,但我们的数据库目前的设计方式是我需要查询这两组具有不同名称的集合,并且更改这将花费大量时间,因此我正在寻找替代解决方案。我将只使用 collectionGroup 两次,因为它似乎是这里最好的。再次感谢您的回答。

标签: typescript google-cloud-firestore


【解决方案1】:

如果集合具有不同的名称,则无法通过单个查询从它们中获取结果。

所以你唯一的选择是:

  • 为每个集合(名称)运行单独的查询。
  • 为集合命名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2021-05-09
    • 2021-03-27
    相关资源
    最近更新 更多