gpt4 book ai didi

java - Firebase,所有节点上的 .addSnapshotListener

转载 作者:行者123 更新时间:2023-12-01 16:38:59 26 4
gpt4 key购买 nike

我正在为我的 Spring-boot 项目使用 FireStore,并且我使这段代码工作正常。这样我就可以实时更新集合“values”中的值正在发生的变化。

Firestore firestore = FirestoreClient.getFirestore();
CollectionReference valuesCollectionRef = firestore.collection("Users").document("user_name").collection("sensors")
.document("sensorX").collection("Values");

valuesCollectionRef.addSnapshotListener(new EventListener<QuerySnapshot>() {

@Override
public void onEvent(QuerySnapshot snapshot, FirestoreException error) {
System.out.println(snapshot.getDocumentChanges()
.get(0).getDocument().get("value"));
}

});

我想要的是“Users”集合上的监听器当在数据库中的任何位置添加子项时触发该监听器,在“sensorX”或“sensorY”以及“Users”的不同文档中“ Collection 。

Java 中的 Firestore 可以实现这一点吗?

最佳答案

Firestore 中的监听器很浅薄。它们监听单个集合,或者(当使用集合组查询时)监听具有相同名称的多个集合(可能具有相同的数据结构)。不可能为集合及其所有子集合提供监听器。

但是,如果您想知道任何人的sensors 集合何时被修改,则 collection group query 你想要的。

此示例(根据文档稍作修改)监听对任何用户的 sensors 集合(或数据库中其他位置名为 sensors 的任何集合)的任何写入:

db.collectionGroup("sensors").get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
// ...
}
});

如果您想监听任何用户的任何传感器的任何值,您同样可以使用:

db.collectionGroup("Values").get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
// ...
}
});

最后一个最重要的事情是,Values 是一个相当通用的集合名称,并且这将监听任何 Values 集合,无论如何它存在于数据库中的位置。当您使用集合组查询时,您通常会希望使用相当独特的集合名称,例如 SensorValues

关于java - Firebase,所有节点上的 .addSnapshotListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61902796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com