Javascript 定期更改集合Firestore中的文档字段-云函数
我的数据库结构如下: 帖子(集合)->userID(文档)->子帖子(子集合)->文档[isVisible:true] 我们有不同的userID,这意味着每个userID都有不同帖子的子集合 我想设置一个云函数,定期(每2分钟)检查所有子集合(子帖子)中的所有文档,如果字段Javascript 定期更改集合Firestore中的文档字段-云函数,javascript,google-cloud-firestore,google-cloud-functions,Javascript,Google Cloud Firestore,Google Cloud Functions,我的数据库结构如下: 帖子(集合)->userID(文档)->子帖子(子集合)->文档[isVisible:true] 我们有不同的userID,这意味着每个userID都有不同帖子的子集合 我想设置一个云函数,定期(每2分钟)检查所有子集合(子帖子)中的所有文档,如果字段可见为true,则将其更改为false 这就是我所做的: exports.changeIsVisibleFieldAfterDay = functions.pubsub .schedule("every 2
可见
为true
,则将其更改为false
这就是我所做的:
exports.changeIsVisibleFieldAfterDay = functions.pubsub
.schedule("every 2 minutes").onRun((context) => {
db.collection("Posts/{uid}/Subposts").get().then((snapshot) => {
if (snapshot.data().isVisible == true) {
snapshot.forEach((doc) => doc.update({isVisible: false}));
}
});
});
我设置了{uid}通配符,因为我需要签入每个文档子集合(子标题)
此实现似乎不起作用。对于firestore查询,您必须提供有效的documentID 如果您希望检查所有用户子集合,那么没有其他方法可以完成
- 查询
collection>迭代用户Posts
- 使用每个用户的有效文档ID查询
,然后迭代子帖子文档子帖子
- 根据条件使用
更新文档{isVisible:false}
- 对
集合使用collectionGroup查询。这将返回每个用户的所有子帖子子帖子
- 迭代文档并根据条件使用
进行更新{isVisible:false}
QuerySnapshot
,在这里,迭代应该在docs
字段上,如下所示
snap.docs.forEach((doc) => {
if (doc.data().isVisible == true) {
doc.update({ isVisible: false });
}
});
注意:我更喜欢使用async/wait with
for..loop
而不是。then()
,因为forEach
的内部wait
调用不会给出预期的结果。谢谢,如果Posts和Subposts集合保持不变,但它们后面的documentID发生变化,我如何实现集合组查询?这是正确的实现方式吗?const querySnapshot=await db.collectionGroup('Subposts')。其中('isVisible','=','true')。get();querySnapshot.forEach((doc)=>{console.log(doc.id,'=>',doc.data());});不管父文档用户ID是什么,这会检查所有子集合(子帖子)吗?是的,您的代码片段是正确的。好的,我稍后会测试它,如果它有效,将答案标记为正确