我有一个数据库,外观如下:
在“聊天”中,有一些文档是根据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
有什么问题吗?
谢谢
答案 0 :(得分:0)
whereArrayContains
操作仅在值为数组的字段上有效。您的Name
字段似乎包含单个字符串值,因此whereArrayContains
不适用于该字段。
Firestore中没有操作可检查某个字符串字段是否包含一个值。最接近的等效项是您可以检查某个字段是否以开头的特定值。
如果您需要真正的包含类型的操作,则必须使用其他/附加数据库进行搜索。例如,请参阅using an external full-text search engine上的Firestore文档。
但是在这种情况下,为什么不将UID简单地存储在数组字段中,而不是将它们串联到单个字符串中呢?