最近,我决定将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
答案 0 :(得分:1)
在这里,packages
是一个数组,本身不是Firestore子集合。
使用子集合,您的查询将类似于:
db.collection('Mailboxes').doc('vhR4bfqyo9Uqn2ONbgPv')
.collection('packages').where('value','==', '0022').get()
如果我正确理解了您的用例...