我正在构建 javascript 服务,我想从“集合名称”和“文档 ID 数组”的输入中从 firestore 获取所有子集合文档详细信息。请求有效负载调用我的服务:{root_collection_name: "root_collection","msgId": ['11','22','33','66'],"subcollection_name": "message"}我需要搜索所有此msgId 的所有子集合(所有文档的通用名称)文档。我的 firestore 结构如下所示collection: document1: subcollection: document: "val1":"red", "val2":"blue", "val3":"green" document2: subcollection: document: "val1":"apple", "val2":"mango", "val3":"grape" document3: .............. ................例子:root_collection: 11: aaa: message: "val1":"red", "val2":"blue", "val3":"green" 22: bbb: message: "val1":"apple", "val2":"mango", "val3":"grape" 在这种情况下,我需要获取firestore 中可用的msgId "11"、"22"的数据,其他值应发送 null。您能帮忙解决这个问题吗?不确定我在这里缺少什么。这是我为此编写的代码。const input = {"root_collection_name": "root_collection","msgId": ['11','22','33','66'],"subcollection_name": "message"} const test = (input) => { const query = firestore.collection(input.root_collection_name).where('id', 'array-contains-any', input.msgId); query.get().then((querySnapshot) => { querySnapshot.forEach((document) => { document.ref.collection(input.subcollection_name).get().then((querySnapshot) => { querySnapshot.forEach(doc => { console.log('doc data',doc.data()); }); }); }); }); };test(input);
1 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
如果将顶级文档的 ID 添加到子集合文档中,则可以使用 collectionGroup。
因此,从您的示例中您将得到:
root_collection:
11:
aaa:
message:
"root_id": "11", // <<-- new!
"val1":"red",
"val2":"blue",
"val3":"green"
22:
bbb:
message:
"root_id": "22", // <<-- new!
"val1":"apple",
"val2":"mango",
"val3":"grape"
您可以使用以下方式查询:
var msgs = firebase.firestore().collectionGroup('message')
.where('root_id', 'in', ['11','22']);
注意:这将查询所有名为 的子集合message。当您向模型添加较新的子集合时,如果它们不是同一类型的“消息”,您可以选择不同的名称。
添加回答
举报
0/150
提交
取消