如何使用firestore js sdk监听特定的字段更改?
在文档中,它们似乎只显示如何监听整个文档,如果任何“SF”字段发生更改,它将触发回调。
db.collection("cities").doc("SF")
.onSnapshot(function(doc) {
console.log("Current data: ", doc && doc.data());
});
答案 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
),该文档包含webm
和mp3
格式的音频文件数组。当这两个音频文件都异步返回时,则snapshot.data().audioFiles.length === 2
。这增加了条件。当又有两个声音返回时(Castilian-male-IBM
和Latin_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
的更多信息