Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从doc Firebase Firestore实时更新中获取修改后的字段或数据?_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

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

Java 如何从doc Firebase Firestore实时更新中获取修改后的字段或数据?,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我有多份文件。我的问题是,我无法得到修改过的特定数据,我得到的是完整的文档 db.collection("employees").whereEqualTo("OID", OID) .addSnapshotListener(new EventListener<QuerySnapshot>() { @Override public void onEve

我有多份文件。我的问题是,我无法得到修改过的特定数据,我得到的是完整的文档

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

            }
        });
db.collection(“员工”)。其中equalto(“OID”,OID)
.addSnapshotListener(新的EventListener(){
@凌驾
public void OneEvent(@Nullable QuerySnapshot queryDocumentSnapshots,@Nullable FirebaseFirestoreException e){
如果(e!=null){
Log.w(标签“listen:error”,e);
返回;
}
对于(DocumentChange dc:snapshots.getDocumentChanges()){
开关(dc.getType()){
案件补充:
//在这里,我得到了完整的新添加的文档
打破
案例修改:
//这里我得到的是修改过的文档,好吧,但是我只想得到我修改过的文件,得到完整文档的实例。。
打破
已删除的案例:
打破
}
}
}
});
注意:

案例修改:我得到的是对完整文档的修改,效果很好。但是我只想获取我修改过的字段,而不是从文档中获取所有字段

看看上面的截图

例如

如果我将字段isActive=true更改为isActive=false,那么我只想获取特定的字段,,,我不想要剩余的所有字段…(或)如何识别更改的字段

如何确定更改了哪个字段

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

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

Cloud Firestore侦听器在文档级别启动。无法仅使用文档中的特定字段触发。因此Firestore客户端SDK总是返回完整的文档。不幸的是,无法使用客户端SDK仅请求文档的一部分,尽管服务器端SDK的方法中确实存在此选项

如果您想得到特定字段的通知,请考虑添加额外的集合,这些文档只包含那些字段。因此,创建一个额外的集合,其中每个文档只包含您需要的数据。这还有一个好处,因为它还允许您更轻松地保护对不同类型数据的访问。关于这一点,请参见Gil Gilbert的回答:

Todd Kerpelman的回答来自:


这种数据复制在NoSQL解决方案(如Firestore)中非常常见,为此,我建议您观看此视频,以便更好地理解。这是针对Firebase实时数据库的,但同样的原则也适用于云Firestore。

好的,谢谢,先生。好的,我得到了完整的文档,那么我应该如何识别哪个文件被更改?有没有办法找到…在这种情况下,请查看我的更新答案。谢谢,先生。。。