结合使用addSnapshotListener和WhereArray包含Firebase

时间:2019-10-12 08:58:32

标签: android google-cloud-firestore

我有一个数据库,外观如下:

enter image description here

在“聊天”中,有一些文档是根据2个用户ID的组合构建的。在此文档中,有一个名为“名称”的字段,该字段等于该文档的名称。

我正在尝试将SnapshotListener添加如下:

public void getRooms(EventListener<QuerySnapshot> listener) {
    db.collection( "Chats" ).
            whereArrayContains( "Name", auth.getUid()).addSnapshotListener( listener );

}

我想要这段代码要做的是查找所有在其“名称”字段内的文档,该字符串在字符串内的某个位置包含userID。

例如,如果有一个名为abcdegf的文档,而auth.getUid() = abcd我希望它查找该文档。 或者,如果文档名为egfabcd,我仍然希望它找到它。

由于某种原因,即使我知道有一个适合查询的文档,它也找不到任何文档。

whereArrayContains有什么问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

whereArrayContains操作仅在值为数组的字段上有效。您的Name字段似乎包含单个字符串值,因此whereArrayContains不适用于该字段。

Firestore中没有操作可检查某个字符串字段是否包含一个值。最接近的等效项是您可以检查某个字段是否开头的特定值。

如果您需要真正的包含类型的操作,则必须使用其他/附加数据库进行搜索。例如,请参阅using an external full-text search engine上的Firestore文档。

但是在这种情况下,为什么不将UID简单地存储在数组字段中,而不是将它们串联到单个字符串中呢?