gpt4 book ai didi

swift - Firestore 搜索数组包含多个值

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:08 25 4
gpt4 key购买 nike

如果我有一个简单的集合,例如:

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"],因为它会寻找一个数组而不是独立的字符串。

这在 Cloud Firestore 中甚至可能吗?如果没有,是否有其他方法可以做到这一点?

最佳答案

通过在查询中链接条件来查找符合多个条件的文档是很诱人的:

db.collection("Fruits")
.whereField("vitamins", arrayContains: "B6")
.whereField("vitamins", arrayContains: "C")

但是documentation on compound queries建议您目前不能在单个查询中有多个 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)

关于swift - Firestore 搜索数组包含多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54987399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com