Firebase 使用云函数查询Firestore数据库中的子集合

Firebase 使用云函数查询Firestore数据库中的子集合,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,最近,我决定将我的Firebase数据库迁移到。我以为这将是一个巨大的进步,但我恐怕不是。无论如何,我遇到了这样一种情况:我希望能够过滤文档子集合中的元素 我的结构如下: Mailboxes: [ { id: vhR4bfqyo9Uqn2ONbgPv, address: "Address 1", packages: [ { id: qyo9Uqn2vhR4bfqy,

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

我的结构如下:

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"
            }
        ]
    }
]
假设我有一个包的值,我想看看这个包是否存在于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 native 位于db.collection.doc.listCollections.then.collections

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

对于子集合,您的查询如下所示:

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

如果我正确理解了您的用例…

根据Doug的回答,我认为您可能需要将包密钥直接复制为邮箱对象中的数组:它看起来像数组,但实际上是Firebase上的子集合。我只是想用JSON来表示它,以便于阅读。公平地说,我想到了这一点。我不明白为什么要使用listCollections,因为您有要查询的邮箱的id。。。