Javascript 如何从firestore中的文档ID数组中获取所有子集合文档
我正在构建javascript服务,希望从firestore中通过输入“集合名称”和“文档id数组”获取所有子集合文档详细信息 调用我的服务的请求有效负载:Javascript 如何从firestore中的文档ID数组中获取所有子集合文档,javascript,node.js,firebase,google-cloud-platform,google-cloud-firestore,Javascript,Node.js,Firebase,Google Cloud Platform,Google Cloud Firestore,我正在构建javascript服务,希望从firestore中通过输入“集合名称”和“文档id数组”获取所有子集合文档详细信息 调用我的服务的请求有效负载: { root_collection_name: "root_collection", "msgId": ['11','22','33','66'], "subcollection_name": "message" } 我需要为所有这些msgId的搜索所有子集合
{
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”的数据,其他值应发送空值。你能帮个忙吗?我不知道我在哪里失踪了
这是我为此编写的代码
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);
如果将顶级文档的ID添加到子集合文档中,则可以 因此,从您的示例中,您可以:
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"
注意:这将查询名为
message
的任何和所有子集合。在向模型中添加较新的子集合时,如果它们不是同一类型的“消息”,则可以选择不同的名称。据我所知,您希望使用您提供的有效负载显示文档及其字段“val”。如果是这样,请更新并在代码中包含如何调用这些有效负载输入?这将有助于社区复制您的程序,而不必花费太多时间使您的代码在他们的环境中工作。@DonnaldCucharo您是对的,我需要使用上述代码中添加的输入负载获取“val”字段。如果您需要更多详细信息,请告诉我。谢谢@Greg的回复。我在子集合文档中确实有顶级文档id,但它存在于属性数组下,如下所述。root_集合:11:aaa:消息:“root_elm”:[“root_name”:“name1”,“root_id”:“11”],“val1”:“red”,“val2”:“blue”,“val3”:“green”22:bbb:message:*“root_elm”:[“root_name”:“name2”,“root_id”:“22”],**“val1”:“apple”,“val2”:“mango”,“val3”:“grape”你能建议如何在firestore查询中处理这种情况吗?我不理解“root_elm”节点。[“xx”:“yy”,“zz”:“ww”]不是有效的JSON。请澄清,对不起。它的对象数组。我已经更正并更新了下面的结构。root_collection:11:aaa:message:“root_elm”:[{“root_name”:“name1”,“root_id”:“11”}],“val1”:“红色”,“val2”:“蓝色”,“val3”:“绿色”22:bbb:message:“root_elm”:[{“root_name”:“name2”,“root_id”:“22”}],“val1”:“苹果”,“val2”:“芒果”,“val3”:“葡萄”另外,你能让我知道我们是否需要为搜索元素启用索引吗?谢谢你的帮助!!
var msgs = firebase.firestore().collectionGroup('message')
.where('root_id', 'in', ['11','22']);