为了账号安全,请及时绑定邮箱和手机立即绑定

如何从文档 Firebase Firestore 实时更新中获取修改后的字段或数据?

如何从文档 Firebase Firestore 实时更新中获取修改后的字段或数据?

萧十郎 2021-09-15 15:24:46
我有多个文件。我的问题是我无法获得修改过的特定数据,我正在获得完整的文档。 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;                    }                }            }        });笔记:case MODIFIED:这里我得到的是完整文档的修改,效果很好。但我只想获取我修改过的字段,而不是从文档中获取所有字段。看看上面的截图例如如果我将字段isActive=true更改为isActive=fals e,那么我只想获取特定的字段。,我不想要剩余的所有字段...(或)如何确定哪个字段已更改。
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

如何识别哪个字段发生了变化?

您无法在 Cloud Firestore 中实现这一点。新的 Cloud Firestore 数据库与 Firebase 实时数据库具有不同的概念,不应混淆。没有字段级权限或对文档的访问。它是整个文档,或者什么都没有。

因此,如果您想将字段更改isActive=trueisActive=false,那么您将在修改后获得整个文档,不仅仅是您更改的属性。

Cloud Firestore 侦听器在文档级别触发。无法仅通过文档中的特定字段触发。因此 Firestore 客户端 SDK 始终返回完整的文档。不幸的是,虽然服务器端 SDK 的select()方法中确实存在此选项,但无法通过客户端 SDK 仅请求文档的一部分。

如果您只想获得特定字段的通知,请考虑添加一个额外的集合,其中包含仅包含这些字段的文档。因此,创建额外的集合,其中每个文档只包含您需要的数据。这还有一个好处,因为还可以让您更轻松地安全访问不同类型的数据。


查看完整回答
反对 回复 2021-09-15
  • 1 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信