如何从文档 Firebase Firestore 实时更新中获取修改后的字段或数据? [英] How to get the modified field or data from the doc Firebase Firestore realtime updates?

查看:12
本文介绍了如何从文档 Firebase Firestore 实时更新中获取修改后的字段或数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有多个文档.我的问题是我无法获得修改过的特定数据,我正在获得完整的文档.

I have multiple document. My problem is that I am not able to get the particular data which modified, I am getting full documentions.

 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: 在这里,我得到的是完整文档的修改,效果很好.但是我只想获取我修改过的字段,而不是从文档中获取所有字段.

case MODIFIED: here i am getting which is modified of full document, which works fine. But I want to get only the field that I modified instead of getting all the fields from documents.

看上面的截图

例如

如果我将字段 isActive=true 更改为 isActive=false,那么我只想获取特定的字段.,我不想要其余的所有fields...(OR) 如何识别哪个字段发生了变化.

If I change the field isActive=true into isActive=false then I want to get the particular filed only.,, I don't want the remaining all fields...(OR) How to identify which field is changed.

推荐答案

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

How to identify which field is changed?

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

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.

因此,如果您想将字段 isActive=true 更改为 isActive=false,那么您将在修改后获得整个文档,不会 仅更改您已更改的属性.

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 仅请求文档的一部分,尽管此选项确实存在于服务器端 SDK 的 select() 方法.

Cloud Firestore listeners fire on the document level. There is no way to get triggered with just particular fields in a document. So the Firestore client-side SDKs always returns complete documents. Unfortunately, there is no way to request only a part of the document with the client-side SDK, although this option does exist in the server-side SDK's select() method.

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

If you want to get notified only of specific fields, consider adding an extra collection with documents that only contain those fields. So create that additional collection where each document just contains the data you need. This has also a benefit because will also allow you to more easily secure access to the different types of data. For that please see Gil Gilbert's answer from:

Todd Kerpelman 的回答来自:

And Todd Kerpelman's answer from:

这种数据重复在 Firestore 等 NoSQL 解决方案中很常见,为此,我建议您观看此视频 Firebase 数据库的非规范化是正常的,以便更好地理解.适用于 Firebase 实时数据库,但原理与 Cloud Firestore 相同.

This sort of data duplication is quite common in NoSQL solutions such as Firestore and for that, I recommend you see this video, Denormalization is normal with the Firebase Database for a better understanding. It is for Firebase real-time database but same principles aplly to Cloud Firestore.

这篇关于如何从文档 Firebase Firestore 实时更新中获取修改后的字段或数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆