web-dev-qa-db-ja.com

Firestore-特定のフィールドの変更を聞きますか?

Firestore js sdkで特定のフィールドの変更を聞くにはどうすればよいですか?

ドキュメントでは、ドキュメント全体をリッスンする方法のみを示しているようです。「SF」フィールドのいずれかが変更されると、コールバックがトリガーされます。

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

できません。 Firestoreでのすべての操作はドキュメント全体に対して行われます。

これは Cloud Functions Firestore triggers にも当てはまります(何らかの方法で変更されたドキュメント全体のみを受信できます)。

ドキュメントから取得するデータの範囲を絞り込む必要がある場合は、サブコレクション内のドキュメントに配置し、そのドキュメントを個別にクエリします。

22
Doug Stevenson

一部のフィールドのイベントを無視する場合に備えて、次のようなことができます。

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
Christian

ドキュメントを聞いてから、興味のあるフィールドに条件を設定します。

_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);
                    });
_

webmおよび_Castilian-female-IBM_形式の音声ファイルの配列を含む音声(_mp3_)のドキュメントを聞いています。これらのオーディオファイルの両方が非同期に戻ってきたら、snapshot.data().audioFiles.length === 2。これにより、条件がインクリメントされます。さらに2つの音声が戻ってくると(_Castilian-male-IBM_と_Latin_American-female-IBM_)、_audioFilesReady === 3_と次の関数$scope.showNextWord()が起動します。

0