繁体   English   中英

在Cloud Firestore(Android)上使用数组字段收听某些查询的更新

[英]Listen to updates on certain query with array fields on Cloud Firestore (Android)

下图显示了简单聊天应用程序的数据结构。 当两个用户想要通信时,会在他们之间创建一个频道。 成员字符串数组字段列出了用户名。

我想在登录用户的任何渠道收到消息时通知用户。 不知道如何做到这一点。

我尝试下面的查询没有成功。 有任何想法吗?

    listenerRegistration2 =
            firebaseFirestore.collection(COLLECTION_CHANNELS)
                    .whereEqualTo("members.0", username)
                    .addSnapshotListener((queryDocumentSnapshots, e) -> {
                        Log.d("myApp", "queryDocumentSnapshots = ");
                    });

在此处输入图片说明

编辑:2018年9月12日

August 28, 2018开始,现在可以更新数组成员了。 更多信息在这里


如关于数组的官方文档中所示:

尽管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 array属性更改为map 因此,一种更好的方法是考虑这种替代数据库结构,其中每个成员都是映射中的键,并且所有值均为true:

memebers: {
    "sister12": true,
    "wow": true
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM