只收听云火灾收藏品的附加信息?

bil*_*ob2 10 javascript firebase google-cloud-firestore

我注意到,当我尝试在firestore中的Collection上使用实时监听器时,每次将新Document添加到集合中时,逻辑将重新运行,我将下载集合中已有的所有内容

马上:

firebase.firestore().collection("Tweets").onSnapshot(function(querySnapshot) {
      querySnapshot.forEach(function(doc) {
        console.log("snapshot added ", doc)
      });
    });
Run Code Online (Sandbox Code Playgroud)

有没有办法只跟踪收藏品的添加?我想我可以做那个设备端,但是没有必要转移我已经查询的所有额外数据..

该日志的输出将打印出集合中的每个"tweet",无论是否只添加了一个

EX:初始查询

- 甜蜜1

- 2

- 甜蜜3

新推文,推文4已添加

输出:

鸣叫1

鸣叫2

鸣叫3

鸣叫4

如果这是有道理的

Dou*_*son 12

在集合上使用onSnapshot()时,实际上并没有在每次调用时下载整个集合.文档被缓存,并在集合再次更改时重用.

对于导致调用回调的每个更改,您可以通过检查快照中的更改来找出自第一次调用以来新显示的文档.文档中提供了如何执行此操作的示例.使用查询快照,您可以使用此逻辑来确定哪些文档是新的:

snapshot.docChanges.forEach(function(change) {
    if (change.type === "added") {
        // change.doc here is new a new document
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 是的,有get()。 (3认同)
  • “第一个查询快照包含与查询匹配的所有现有文档的添加事件。”,如何忽略第一个快照并仅监听实际添加的文档? (3认同)
  • @BlackCoffee 你不能。相反,您应该弄清楚如何仅查询您想要的文档。通常,这涉及添加可用作过滤器的字段。要么这样,要么您必须根据您定义的标准提出自己的一套关于“新”内容的假设。 (2认同)

小智 1

似乎onSnapshot仅用于收听整个文档,这意味着它将返回您正在收听的文档中的所有字段。所以你不能只检索更改的字段。但你可以根据不同类型的变化做不同的事情:

xxxx.onSnapshot(function(querySnapshot){
     querySnapshot.docChanges.forEach(function(change){
                    if(change.type=="added"){//first time it will be triggered

                    }else if(change.type == "modified"){//modified

                    }else if(change.type == "removed"){//removed


                    }
    })
})
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 问题指定侦听集合,但此答案指定侦听文档 (3认同)