【发布时间】:2020-08-11 16:34:02
【问题描述】:
有谁知道是否有一种方法可以在父集合的文档中进行迭代? 我尝试从我的父集合中获取每个文档,但 querySnapshot 似乎是空的,而事实并非如此。
我的收藏路径是这样的:
parentCollection(comments)/docs/subCollection(comments)/docs
我要做的是在每个子集合及其文档中进行迭代,为此我需要在父集合的每个文档中进行迭代,但是当我使用 get() 时,它返回一个空的 querySnapshot。
这是我的代码:
return admin.firestore().collection("comments").get().then((querySnapshot) => {
console.log(querySnapshot);
querySnapshot.forEach((doc) => {
console.log(doc);
return doc.ref.collection("comments").get().then((querySnapshot2) => {
console.log(querySnapshot2);
querySnapshot2.forEach((doc2) => {
console.log(doc2.data());
})
return true;
});
});
return true;
});
Ps:我知道,我不应该嵌套 promise。
更新
当记录querySnapshot.size 和querySnapshot.empty 时,我的console.log 返回的内容如下:
这里是整个代码:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
exports.onUpdateUserUpdateComments = functions.firestore
.document("/users/{userId}")
.onUpdate(async (change, context) => {
const userId = context.params.userId;
const userUpdate = change.after.data();
const newPhotoUrl = userUpdate.photoUrl;
console.log("userId",userId);
console.log("newPhotoUrl",newPhotoUrl);
return admin.firestore().collection("comments").get().then((querySnapshot) => {
console.log(querySnapshot.size);
console.log(querySnapshot.empty);
querySnapshot.forEach((doc) => {
console.log(doc);
return doc.ref.collection("comments").get().then((querySnapshot2) => {
console.log(querySnapshot2);
querySnapshot2.forEach((doc2) => {
console.log(doc2.data());
})
return true;
});
});
return true;
});
});
在这里部署后的日志输出
【问题讨论】:
-
是说在
admin.firestore().collection("comments").get().then((querySnapshot) => {之后,querySnapshot没有结果?你能console.log(querySnapshot.size)更新它的输出吗? -
@FrankvanPuffelen 是的,就是这样,而我的 cmets 集合甚至不是空的......我注意到,当我试图只获取具有子集合的父集合的文档时,总是会发生这种情况。
-
我不知道这种情况的已知问题。从您迄今为止共享的代码/数据中很难看出发生了什么。您能否尝试在我们任何人都可以在本地运行的单个 Node.js/JavaScript sn-p 中重现该问题?
-
我已经在本地复制了。我在我的 Firestore 中创建了相同的结构,并将您的代码完全放入函数中,并且我刚刚使用 node 调用它并且它工作正常,您在这个嵌套集合中有什么吗?我认为问题可能在于您如何运行它...也许您可以添加代码更多代码....
-
@vitooh 你能告诉我你的代码吗?也许是因为我错过了一些东西,也许我没有初始化一些东西..
标签: javascript node.js google-cloud-firestore google-cloud-functions