【问题标题】:Query a sub-collection in Firestore database using Cloud Functions使用 Cloud Functions 查询 Firestore 数据库中的子集合
【发布时间】:2019-10-28 05:52:16
【问题描述】:

最近,我决定将我的 Firebase 数据库迁移到 Cloud Firestore。我认为这将是对Realtime database 的巨大改进,但恐怕不是。无论如何,我遇到了一种情况,我希望能够过滤文档子集合中的元素。

我的结构如下:

Mailboxes: [
    {
        id: vhR4bfqyo9Uqn2ONbgPv,
        address: "Address 1",
        packages: [
            {
                id: qyo9Uqn2vhR4bfqy,
                value: "0011"
            },
            {
                id: 9Uqn2qyovqyhR4bf,
                value: "0022"
            }
        ]
    },
    {
        id: BBR4bfqyo9Uqn2ONbEpn,
        address: "Address 2",
        packages: [
            {
                id: qn2vhR4bfqyqyo9U,
                value: "0066"
            }
        ]
    }
]

假设我有一个包的 value,我希望能够查看该包是否存在于 id 为 vhR4bfqyo9Uqn2ONbgPv 的邮箱中。

到目前为止,我已经尝试过以下(以及它的一些变体):

db.collection('Mailboxes').doc('vhR4bfqyo9Uqn2ONbgPv').listCollections().then(collections => {
    let collRef = collections.find("id", "==", "packages");
    // And, from here on, I assume I will be able to filter the items in the collection somehow.
    return 0;
});

但是,我在 Firebase 云函数中收到错误消息:

TypeError: id 不是函数 在 Array.find(本机) 在 db.collection.doc.listCollections.then.collections

【问题讨论】:

标签: firebase google-cloud-firestore


【解决方案1】:

这里,packages 是一个数组,而不是 Firestore 子集合本身。

使用子集合,您的查询将如下所示:

db.collection('Mailboxes').doc('vhR4bfqyo9Uqn2ONbgPv')
.collection('packages').where('value','==', '0022').get()

如果我正确理解您的用例...

【讨论】:

  • 嗯,它看起来像一个数组,但它实际上是 Firebase 上的一个子集合。为了便于阅读,我只是想将其表示为 JSON。
  • 很公平,这让我想到了。我不明白你为什么要使用 listCollections ,因为你有要查询的邮箱的 id...
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2019-07-12
  • 2020-05-06
  • 2021-03-29
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2019-12-24
相关资源
最近更新 更多