如何在Firestore中的文档中检测字段删除?

时间:2020-09-12 17:05:33

标签: android firebase google-cloud-firestore

以下是我们可以用来了解是否添加,修改或删除了文档的代码:

db.collection("cities")
        .whereEqualTo("state", "CA")
        .addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot snapshots,
                                @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    Log.w(TAG, "listen:error", e);
                    return;
                }

                for (DocumentChange dc : snapshots.getDocumentChanges()) {
                    switch (dc.getType()) {
                        case ADDED:
                            Log.d(TAG, "New city: " + dc.getDocument().getData());
                            break;
                        case MODIFIED:
                            Log.d(TAG, "Modified city: " + dc.getDocument().getData());
                            break;
                        case REMOVED:
                            Log.d(TAG, "Removed city: " + dc.getDocument().getData());
                            break;
                    }
                }

            }
        });

客户是否有办法知道另一个客户是否删除了文档内的字段

1 个答案:

答案 0 :(得分:1)

Firestore SDK不提供任何直接方法来检测这种情况。您将必须编写代码以将先前的快照与新的快照进行比较,以查看是否添加,更改或删除了任何字段。您的解决方案将必须:

  • 保留上次监听器调用时的QuerySnapshot,并将其与当前快照进行比较
  • 遍历QuerySnapshot中包含的每个新DocumentSnapshot,并从保留的QuerySnapshot中找到匹配的先前DocumentSnapshot。
  • 从当前和先前DocumentSnapshot的数据中区分Map<String, Object>来查找特定更改

这显然是不平凡的代码,在很大程度上取决于您要比较的实际字段数据。