代码之家  ›  专栏  ›  技术社区  ›  Patola

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

  •  0
  • Patola  · 技术社区  · 7 年前

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

    我想在登录用户的任何频道收到消息时通知用户。不知道怎么做。

    我试过下面的问题,但没有成功。有什么想法吗?

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

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  1
  •   Alex Mamo    7 年前

    编辑: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());
        }
    }
    

    但请注意,即使 成员 对象作为数组存储在数据库中, entry.getValue() 返回 ArrayList ,不是 array .

    这里还有一个解决方法,可以帮助您实现这一点,但您需要更改 成员 数组属性到 map . 因此,更好的方法是考虑这种替代数据库结构,其中每个memeber是映射中的键,所有值都是真的:

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