我正在尝试对iOS(Swift)上的Firestore使用查询:
db.collection(FS_PICS)
//.whereField("category", arrayContains: "Animals")
.whereField("category", arrayContains: ["Animals", "Dogs"])
.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
}
}
}
它不会返回任何结果
// doesn't work
.whereField("category", arrayContains: ["Animals", "Dogs"])
或搭配
// doesn't work
.whereField("category", in: ["Animals", "Dogs"])
但是我有8个结果:
// It works!!
.whereField("category", arrayContains: "Animals")
它甚至不能像AND一样工作,因为它也不起作用:
// It works!!
.whereField("category", arrayContains: ["Animals"])
那么这个函数的概念是什么,我应该怎么做才能得到OR?
答案 0 :(得分:3)
答案 1 :(得分:2)
编辑:根据截图,文档不正确,您是对的。无论如何,都需要进行一些澄清:
这是错误的:
.whereField("category", arrayContains: ["Animals", "Dogs"])
arrayContains
必须输入该数组包含的单一类型(即,字符串数组输入一个字符串),而不是集合。 arrayContains
不执行“或”或“与”运算,它仅执行与数组内元素的单个实例相等的操作。
这是正确的:
.whereField("category", arrayContains: "Dogs")
这也是正确的:
.whereField("category", arrayContainsAny: ["Animals", "Dogs"])
arrayContainsAny
查询执行OR操作,其中category
必须包含“动物”或“狗”。
为了进行度量,还有in
可以对非集合(即非数组)字段执行“或”运算。如果“类别”字段只是一个String
(而不是Array
),则可以使用以下命令执行OR查询:
.whereField("category", in: ["Animals", "Dogs"])