我正在尝试在名称上查询我的收藏:
let db = Firestore.firestore()
print(searchString)
db.collection("Coins").order(by: "name").whereField("name", isGreaterThanOrEqualTo: searchString)
.getDocuments(){ (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
var coins:[CryptoCompareService.Coin] = []
for document in querySnapshot!.documents {
let coin = try! FirestoreDecoder().decode(CryptoCompareService.Coin.self, from: document.data())
coins.append(coin)
}
}
}
我的收藏品看起来像这样:
我正在发送文字,但它总是返回集合中的所有项目。有什么想法吗?
编辑:看起来它如何处理区分大小写似乎很奇怪。当我输入说,Eth,它给了我所有的记录,但当我输入" eth"它给了我11条记录。哪个也错了。或者至少我不明白搜索是怎么回事。
答案 0 :(得分:0)
假设“name”字段是识别每个条目的一种方法,请尝试将您存储在名称中的数据类型更改为整数而不是字符串(或者您可以添加另一个字段来存储一个唯一数量的条目,并根据该查询执行查询。我相信当你使用isGreaterThanOrEqualTo它比较每个字符的ascii代码而不是它的真实值或字符的词典顺序时,这就是为什么你在写“Eth”或“eth”时会得到不同的结果。
在ascii代码中,“E”与“e”不同。