如果我有一个简单的集合,例如:
Fruits: Banana: title: "Banana" vitamins: ["potassium","B6","C"] Apple: title: "Apple" vitamins: ["A","B6","C"]
如果我要搜索含有维生素B6的水果,则可以执行以下操作:
db.collection("Fruits").whereField("vitamins", arrayContains: "A").getDocuments() { (querySnapshot, err) in if let err = err { print("Error getting documents: \(err)") } else { for document in querySnapshot!.documents { print("\(document.documentID) => \(document.data())") } } }
这样一来,我便可以看到我收藏的所有含有维生素A的水果。但是,我如何能够搜索含有多种维生素(例如维生素B6和C)的水果?我不能简单地搜索["B6","C"],因为那样会寻找数组,而不是独立的字符串。
["B6","C"]
在Cloud Firestore中甚至有可能吗?如果没有,还有其他替代方法吗?
通过在查询中链接条件来寻找匹配多个条件的文档将很诱人:
db.collection("Fruits") .whereField("vitamins", arrayContains: "B6") .whereField("vitamins", arrayContains: "C")
但是有关复合查询的文档建议您当前不能在单个查询中具有多个arrayContains条件。
因此,今天拥有的东西是不可能的。考虑使用映射结构而不是数组:
Fruits: Banana: title: "Banana" vitamins: { "potassium": true, "B6": true, "C": true }
然后,您可以像这样查询:
db.collection("Fruits") .whereField("vitamins.B6", isEqualTo: true) .whereField("vitamins.C", isEqualTo: true)