搜索不到 Firebase Flutter阵列

bxjv4tth  于 2023-03-19  发布在  Flutter
关注(0)|答案(2)|浏览(77)

搜索不到 Firebase Flutter阵列
请帮帮忙,我找了好几天都没找到解决办法。

FirebaseFirestore.instance
   .collection("Chats")
   .where("members", arrayContains: "90TDhef6G9QY7ljJyZjdpeaLNoA3")
   .where("members", arrayContains: "yutgffvvpobjjJyZjdpeaLNoA3")
   .get();

我想搜索包含用户的聊天。
出现以下错误消息:
不能多次使用“数组包含”筛选器。

ecfdbz9o

ecfdbz9o1#

FirebaseFirestore.instance.collection('myCollection').where('myArray', arrayContains: 'searchTerm').get().then((querySnapshot) {
  querySnapshot.docs.forEach((doc) {
    print(doc.data());
  });
});

在此查询“myCollection”集合并搜索其中“myArray”字段包含搜索项“searchTerm”的文档。arrayContains运算符用于搜索数组中的项。

0yg35tkg

0yg35tkg2#

正如错误消息和查询限制文档所述,Firestore查询只能包含一个arrayContains运算符,在当前数据结构中,唯一的选择是在查询中执行一次arrayContains检查,然后在应用程序代码中过滤其余的arrayContains检查。
为了让查询完全在数据库上运行,考虑将成员存储在Map字段中,而不是存储在数组中:

membersMap: {
  '90TDhef6G9QY7ljJyZjdpeaLNoA3': true, 
  'yutgffvvpobjjJyZjdpeaLNoA3': true
}

有了这个结构,您可以使用==比较来查找匹配项,并且在查询中 * 允许 * 进行多个这样的相等性检查:

FirebaseFirestore.instance
   .collection("Chats")
   .where("membersMap.90TDhef6G9QY7ljJyZjdpeaLNoA3", isEqualTo: true)
   .where("membersMap.yutgffvvpobjjJyZjdpeaLNoA3", isEqualTo: true)
   .get();

相关问题