当前位置: 首页 > 知识库问答 >
问题:

定期更改集合中文档的字段 Firestore - 云功能

苗征
2023-03-14

我有一个这样的数据库结构:

帖子(收藏)-

我们有不同的用户ID,这意味着每个用户ID都有不同帖子的子集合。

我想设置一个云函数,定期(每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}通配符,因为我需要签入每个文档子集合(子帖子)。

这种实现似乎不起作用。

共有1个答案

盖诚
2023-03-14

对于firestore查询,您必须提供有效的文档id。

如果您希望检查所有用户的子集合,有一些其他的方法可以做到这一点!

  1. 使用集合查询
  • 查询帖子集合
    < li >对< code > sub post 集合使用collectionGroup查询。这将返回每个用户的所有子帖子 < li >迭代文档,并基于条件使用< code>{isVisible: false}进行更新

在您的迭代代码片段中,集合查询返回< code>QuerySnapshot,并且在此迭代应该在字段< code>docs上,如下所示

snap.docs.forEach((doc) => {
    if (doc.data().isVisible == true) {
        doc.update({ isVisible: false });
    }
});

注意:我更喜欢使用async/await with for..循环,而不是< code >。then(),因为< code>forEach不会通过其内部的< code>await调用给出预期的结果。

 类似资料:
  • 我试图设置一个聊天应用程序,在其中你可以搜索随机的用户交谈。现在,firestore中的数据库结构如下: 集合“users”-文档“userid”-集合“conversations”-文档“conversationid”-字段“partner”,“lastmessage” 其次,我有一个集合“conversations”,其中包含对话中的所有消息。 我现在尝试做的是,当你按下一个按钮时,应用程序将

  • 我已经阅读了下面的所有问题,但在文档中找不到任何描述如何同步集合并只从集合中接收更改的文档的内容。我的同步集合中有500多个文档(使用redux-saga-firebase syncCollection),但通常只有大约100个文档会改变。在任何给定的时间,甚至更少的会改变,但我目前得到所有500+文档,当即使有一个改变,这导致500+读取。不理想,会让我付出代价。 下面是我使用redux-sag

  • 我如何删除一个特定的文档中的一个集合在fiRecovery使用反应? 我在这里和谷歌上看了看,但我没有发现任何内在相关的东西。 我只是设法从我的集合中删除索引[0]的文档。 这状态idDoc接收所有id文档。 如果我只是传递. doc(idDoc),我会得到以下错误: Firebase Error: Function Collection Reference.doc()要求它的第一个参数是非空字符

  • 在我的集合的SnapshotListener中,我使用以下命令循环遍历文档: 在 for 循环中的每个文档中,让我们称之为 ,我在 Cloud Firestore 上还有另一个文档集合。我想检索内子集合中的所有文档(每个文档只有一个字符串字段)。我能够做一个来获取本身,我用它来获取字符串字段,但我不知道如何获取其子集合中的文档。

  • 我还担心这会增加数据库的读/写次数。 有人能帮帮我吗?提前致谢