下图显示了简单聊天应用程序的数据结构。当两个用户想要通信时,会在他们之间创建一个频道。成员字符串数组字段列出了用户名。
我想在登录用户的任何渠道收到消息时通知用户。不确定如何做到这一点。
我尝试了以下查询,但未成功。有任何想法吗?
listenerRegistration2 =
firebaseFirestore.collection(COLLECTION_CHANNELS)
.whereEqualTo("members.0", username)
.addSnapshotListener((queryDocumentSnapshots, e) -> {
Log.d("myApp", "queryDocumentSnapshots = ");
});
答案 0 :(得分:1)
编辑:2018年9月12日
从August 28, 2018
开始,现在可以更新数组成员。更多信息 here 。
与arrays的官方文档中一样:
尽管Cloud Firestore可以存储阵列,但
it does not support
可以查询阵列成员或更新单个阵列元素。
因此,不幸的是,您无法使用数组来实现此目的。如果只想获取整个memebers
数组,则只需使用get()
调用,然后再像这样遍历Map
:
Map<String, Object> map = documentSnapshot.getData();
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (entry.getKey().equals("memebers")) {
Log.d("TAG", entry.getValue().toString());
}
}
但是请注意,即使memebers
对象作为数组存储在数据库中,entry.getValue()
也会返回ArrayList
,而不是array
。
这里还有一个解决方法,可以帮助您实现这一目标,但是您需要将memebers
数组属性更改为map
。因此,一种更好的方法是考虑这种替代的数据库结构,其中每个成员都是映射中的键,并且所有值都是真实的:
memebers: {
"sister12": true,
"wow": true
}