我正在构建javascript服务,我想从其中输入“集合名称” 和“ document-id数组” 。从firestore中获取所有子集合文档详细信息。 / p>
请求有效负载调用我的服务:
{
root_collection_name: "root_collection",
"msgId": ['11','22','33','66'],
"subcollection_name": "message"
}
我需要搜索所有 msgId的的所有子集合(所有文档的通用名称)文档。
我的消防站结构如下
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” 的数据,并且其他值应该发送空值。您能帮上忙吗,不确定我在这里想念的地方。
这是我为此编写的代码。
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);
答案 0 :(得分:0)
如果将顶级文档的ID添加到子集合文档中,则可以use 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
的所有子集合。当您向模型中添加较新的子集合时,如果它们不是同一类型的“消息”,则可以选择其他名称。