複数のドキュメントがあります。私の問題は、変更された特定のデータを取得できないことです。完全なドキュメントを取得しています。
db.collection("employees").whereEqualTo("OID", OID)
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "listen:error", e);
return;
}
for (DocumentChange dc : snapshots.getDocumentChanges()) {
switch (dc.getType()) {
case ADDED:
//Here i am getting full newly added documents
break;
case MODIFIED:
//here i am getting which is modified document,ok fine...,But i want to get only the filed which i modified instance of getting full documents..
break;
case REMOVED:
break;
}
}
}
});
注意:
変更されたケース:ここでは、完全なドキュメントの変更されたものを取得していますが、正常に機能します。しかし、ドキュメントからすべてのフィールドを取得するのではなく、変更したフィールドのみを取得したいのです。
上記のスクリーンショットを見てください
例えば
フィールドisActive = trueをisActive = fals e に変更した場合、特定のフィールドのみを取得したいのですが、残りのすべてのフィールドは必要ありません...(または)変更されたフィールドを識別する方法。
How to identify which field is changed?
You cannot achieve this in Cloud Firestore. The new Cloud Firestore database has different concepts than Firebase real-time database and should not be confused. There are no field-level permissions or access to a document. It's the entire document, or nothing.
So if you want to change the field isActive=true
into isActive=false
, then you will get the entire document once it was modified and not only the property that you have changed.
Cloud Firestoreリスナーはドキュメントレベルで起動します。ドキュメント内の特定のフィールドだけでトリガーされる方法はありません。したがって、Firestoreクライアント側SDKは常に完全なドキュメントを返します。残念ながら、このオプションはサーバー側SDKのselect()メソッドに存在しますが、クライアント側SDKでドキュメントの一部のみをリクエストする方法はありません。
特定のフィールドのみを通知する場合は、それらのフィールドのみを含むドキュメントを含むコレクションを追加することを検討してください。そのため、各ドキュメントに必要なデータのみが含まれる追加のコレクションを作成します。また、これにより、さまざまなタイプのデータへのアクセスをより簡単に保護できるため、利点もあります。それについては、ギル・ギルバートの答えを見てください:
そして、トッド・ケルペルマンの答え:
この種のデータ複製は、FirestoreなどのNoSQLソリューションでは非常に一般的です。そのため、理解を深めるために、Firebaseデータベースでは非正規化が正常に行われるこのビデオをご覧になることをお勧めします。これはFirebaseリアルタイムデータベース用ですが、同じ原則がCloud Firestoreにも適用されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加