Javascript 定期更改集合Firestore中的文档字段-云函数

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

我的数据库结构如下:

帖子(集合)->userID(文档)->子帖子(子集合)->文档[isVisible:true]

我们有不同的userID,这意味着每个userID都有不同帖子的子集合

我想设置一个云函数,定期(每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

如果您希望检查所有用户子集合,那么没有其他方法可以完成

  • 使用集合查询
    • 查询
      Posts
      collection>迭代用户
    • 使用每个用户的有效文档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是什么,这会检查所有子集合(子帖子)吗?是的,您的代码片段是正确的。好的,我稍后会测试它,如果它有效,将答案标记为正确