Firestore - 收听特定的字段更改?

时间:2017-12-17 23:40:34

标签: javascript firebase google-cloud-firestore

如何使用firestore js sdk监听特定的字段更改?

在文档中,它们似乎只显示如何监听整个文档,如果任何“SF”字段发生更改,它将触发回调。

db.collection("cities").doc("SF")
.onSnapshot(function(doc) {
    console.log("Current data: ", doc && doc.data());
});

4 个答案:

答案 0 :(得分:18)

你做不到。 Firestore中的所有操作都在整个文档中。

对于Cloud Functions Firestore triggers也是如此(您只能接收以某种方式更改的整个文档。)

如果您需要缩小某些数据的范围以从文档中检索,请将其放在子集合中的文档中,并单独查询该文档。

答案 1 :(得分:2)

只要您想忽略某些字段中的事件,就可以执行以下操作:

export const yourCloudFunction = functions.firestore
.document('/your-path')
  .onUpdate(
    field('foo', 'REMOVED', (change, context) => {
      console.log('Will get here only if foo was removed');
      // ... Your implementation here
    }),
  );

我创建了field函数here的要旨。 记住,这不会避免您的函数在其他字段发生更改时运行,只会将处理不了的事情交给您,而是返回已解决的承诺。

答案 2 :(得分:0)

听文档,然后在您感兴趣的字段上设置条件:

firebase.firestore().collection('Dictionaries').doc('Spanish').collection('Words').doc(word).collection('Pronunciations').doc('Castilian-female-IBM').onSnapshot(function(snapshot) {
                      if (snapshot.data().audioFiles) { // eliminates an error message
                        if (snapshot.data().audioFiles.length === 2) {
                          audioFilesReady++;
                          if (audioFilesReady === 3) {
                            $scope.showNextWord();
                          }
                        }
                      }
                    }, function(error) {
                      console.error(error);
                    });

我正在收听一个语音文档(Castilian-female-IBM),该文档包含webmmp3格式的音频文件数组。当这两个音频文件都异步返回时,则snapshot.data().audioFiles.length === 2。这增加了条件。当又有两个声音返回时(Castilian-male-IBMLatin_American-female-IBM),则触发audioFilesReady === 3和下一个功能$scope.showNextWord()

答案 3 :(得分:-2)

开箱即用之前和之后的方法观看我的工作

const clientDataBefore = change.before.data();
console.log("Info database before ", clientDataBefore);

const clientDataAfter = change.after.data();
console.log("Info database after ", clientDataAfter );

例如,现在您应该比较特定字段的更改,并执行一些操作或只返回它。

有关before.data()和after.data()here

的更多信息