复合Firestore中的whereField查询(快速)

时间:2020-08-24 07:58:15

标签: swift firebase google-cloud-firestore

你好,我一直在努力写所需的查询一段时间。我有一个集合,其中每个文档都具有两个属性: user1 user2 。现在,我要检索在 user1 user2 下具有特定字符串的所有文档。输入字符串取决于我的应用程序的实际用例。 这是一个例子: 输入字符串:“ Alex”,“ Adam” 我要检索有效文档的两个选项:

  1. user1 :“亚历克斯”, user2 :“亚当”
  2. user1 :“亚当”, user2 :“ Alex”

所以我需要这个确切的查询:给我所有 user1 等于“ Alex”并且 user2 等于“ Adam”或 user1的文档等于“亚当”, user2 等于“亚历克斯”。

我一直在尝试多个查询,例如:

.whereField("user1", in: ["Alex", "Adam"].whereField["user2", in: ["Adam", "Alex"]

我认为这行得通,因为这是说获取 user1 等于“ Alex”或“ Adam”且 user2 等于“ Adam”或“亚历克斯”。但是事实证明,您不能在单个查询中多次使用in过滤器。我该如何工作?

这是我的Firestore数据库的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:2)

我添加了这个吊舱是为了更方便的工作

pod 'FirebaseFirestoreSwift'

第一种方式

如果您想与这2个用户进行所有聊天 为此,您需要为此聊天中的所有用户添加新的跨领域

let searchTerm = channelReference.whereField("users", arrayContainsAny: [ID1, ID2])

具有2个不同查询的简单方法-用户1:“亚历克斯”,用户2:“亚当”

let searchTerm1 = reference
            .whereField("user1", isEqualTo: "Alex")
            .whereField("user2", isEqualTo: "Adam")

let searchTerm2 = reference
            .whereField("user1", isEqualTo: "Adam")
            .whereField("user2", isEqualTo: "Alex")

文档参考https://firebase.google.com/docs/firestore/query-data/queries#compound_queries