当前位置: 首页 > 面试题库 >

在Cloud Firestore(Android)上侦听具有数组字段的某些查询的更新

沙星波
2023-03-14
问题内容

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

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

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

    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

这里还有一个解决方法,可以帮助您实现这一目标,但是您需要将memebersarray属性更改为map。因此,一种更好的方法是考虑这种替代数据库结构,其中每个成员都是映射中的键,并且所有值均为true

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


 类似资料:
  • 问题内容: 我在Google Cloud Firestore中的查询条件有问题。 下面是我的代码,以获得第一个以HA_开头的文档并按ID DESC排序 我想获取文章ID为“ HA_”或“ XE_”开头的文章的最后ID 例如上图: if(articleId以“ HA_”开头)=>返回id 831的对象 if(articleId以“ XE_”开头)=>返回ID为833的对象 现在我得到一个错误 jav

  • 我有Solr 5.3.1,需要查询除某些字段之外的所有字段(我需要在某些字段中搜索而不是以这种方式检索字段[/?q=query&fl=field1,field2,field3]) 2.[以下解决方案有效,但需要更多时间] 3.我在data-config.xml中设置了indexed=“false”,它只忽略此字段中的搜索,但是当我搜索所有字段http://localhost:8983/solr/t

  • 我想在我的中添加一种,当用户更改的值时,应用程序会在控制台上打印一些内容。 我搜索了一下,发现了以下非常类似的问题:将Listener值更改为JTextField 上述问题的答案非常清晰有效,但不幸的是,它只对(而不是)有用,因为它说您应该像这样使用DocumentListener: 但在JavaFX的文本字段中,您无法执行此操作。所以解决办法是什么? (用代码描述可能非常好,但如果不可能,任何提

  • 问题内容: Postgres具有此JSON数据类型,我想知道如何查询JSON数组中的数据?我正在使用Postgres 9.3.1 我已插入具有以下两个字段名称的PUBLISHER表:字符串和数据:json 我想查询并列出类型为“小说”的作者。在这种情况下,应该是“ James”和“ Tom”作为输出。 这种查询的内容: 问题答案: 您可以使用该函数从数组生成: 有了它,您可以将其用作子查询,这样就

  • 本文向大家介绍Android 侦听SharedPreferences更改,包括了Android 侦听SharedPreferences更改的使用技巧和注意事项,需要的朋友参考一下 示例 请注意: 仅当添加或更改值时,侦听器才会触发,设置相同的值将不会调用它; 侦听器需要保存在成员变量中,而不是匿名类,因为registerOnSharedPreferenceChangeListener它使用弱引用进

  • 我只是想知道是否可以创建一个JQPL查询,该查询将对表进行处理,并选择所有记录,这些记录至少与我传递给查询的对象的y个属性中的x个ouf匹配。假设汽车对象有5个属性:maxSpeed、weight、Colory、power、type,然后我想查询一个数据库,以获得所有至少有2个属性与我传递给查询的汽车相同的汽车(不是实际的汽车--只是它的属性)。我找不到任何东西,所以我只是获取至少有一个属性匹配的