使用Cloud Functions查询Firestore数据库中的子集合

时间:2019-10-28 05:52:16

标签: firebase google-cloud-firestore

最近,我决定将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"
            }
        ]
    }
]

想象一下,我有一个软件包的,我希望能够看到此软件包是否存在于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

1 个答案:

答案 0 :(得分:1)

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

使用子集合,您的查询将类似于:

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

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