有人知道是否有一种方法可以迭代父集合的文档吗?我尝试从我的父集合中获取每个文档,但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;
});
附言:I知道,我不应该嵌套promise。
更新
这是我的控制台。日志<code>查询快照时返回的日志。大小和查询快照。空
:
下面是完整的代码:
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;
});
});
在此处部署后,将显示日志输出
在做了多次测试后,我发现问题是由于这样一个事实,即使文档在控制台上是可见的,它们也是不存在的。它们之所以不存在,是因为即使它们包含子集合,也不会被算作数据。这就是为什么文档是斜体,为什么下一句是“这个文档不存在,也不会出现在查询或快照中”
要解决这个问题,您要么必须将数据添加到这些文档中并在不需要时将其删除,要么您可以在控制台中手动创建它们。或者更好的是,如果不想更改代码中的任何内容,您可以使用listDocuments方法。Admin SDK提供了一个listDocuments方法,说明如下:
返回的文档引用可以包括对“丢失文档”的引用,即不存在文档但包含具有文档的子集合的文档位置。试图读取这样的文档参考(例如通过。get()或。onSnapshot())将返回一个DocumentSnapshot。exists属性为false。
我通过复制/粘贴您的代码实现了这个功能,我可以确认它工作得很好。
当然,我也添加了我测试的fiRecovery的结构:
-comments - <genrated docID1> -comments - empty
- <genrated docID2> -comments - <dummy document>
和用户
结构以使触发器工作。我通过手动更新“photoUrl”字段来触发它。
使用此结构,< code>querySnapshot.size给出值< code>2,而< code>querySnapshot.empty为< code>false。
实际上,您可以在日志中找到QuerySnapshot
中的_size:0,
,但是这是针对这个嵌套的空“注释”集合的。
此代码父集合中的BTW < code > query snapshot 根本不会被记录。仅父集合和嵌套集合的文档。
希望这能有所帮助!
为了查询子集合和父文档,我对firest的文档及其最佳实践有一些问题。我试图使用Typecript在我的Firebase函数中进行查询。 DB: ├── 用户(集合) │ └── 用户(ID为的文档) │ │ └── 计划(子集合) 我有一个数组中的用户ID列表,我需要从用户文档和当前文档的子集合计划中收集信息。 但是如何从用户文档和子集合(计划)文档(当前)中获取数据,我不知道在场景中最有效的查
我在Cloud Firestore中有以下简化的数据模式: 我现在想向用户展示他团队的所有“待办事项”文档,我不知道什么是最好的方法。 1. 集合组查询 - 按团队 ID 查询 为此需要两个查询。每个待办事项文档都可以具有父团队 ID,并通过集合组查询进行检索,例如 - 到目前为止,这对我来说似乎是最好的解决方案,但缺点是“IN”查询限制为10个值 https://firebase.googleb
问题内容: 我有一个要求,我需要限制从表返回的特定标志和所有记录的其他标志值的记录数。 例如:table有一个名为的元素,可能的值为’m’和’o’。 我只需要返回10条“ o”记录和所有“ m”记录。 我正打算为此与工会写一个查询。像这样: 这可能吗?请注意,它是一个JPA查询。(contact_history是对象名称) 任何其他更好的建议,欢迎您! 问题答案: 不,这对于JPQL是不可能的,因
问题内容: 我正在尝试从C#查询SQL Server数据库 我有课 我的查询中有问题。 当我给普通查询“从表中选择*”时,这给了我完美的结果。 但是当我尝试给出条件时,它给了我错误。有什么建议可以解决吗?谢谢。 问题答案: 钿狅笍 警告 此答案包含一个SQL注入安全漏洞。不要使用它。如该问题的其他一些答案所述(例如,Tony Hopkinson的答案),请考虑使用参数化查询。 尝试在where子句
我有一个名为“Prices”的MongoDB集合,我试图查询“startDate”和“endDate”之间的价格。 该集合每10秒存储一次价格,但是当查询此集合以绘制图形时,每1-2分钟的价格才是真正重要的。 我尝试用两种不同的方式编写此查询: 方法1:使用{$gte:startDate,$lte:endDate} 此方法引发以下错误: 如果删除排序('-timestamp')行,并再次运行此查询
我想我读到您可以使用新的Firebase Firestore查询子集合,但我没有看到任何示例。例如,我以以下方式设置了Firestore: 舞蹈[收藏] DanceName 歌曲[收藏] 松南 我如何才能查询“查找所有的舞蹈在songName=='x'”