为什么Firestore会在我的where查询中返回所有记录

时间:2018-02-20 23:33:23

标签: swift firebase google-cloud-firestore

我正在尝试在名称上查询我的收藏:

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)
                }  

            }
    }

我的收藏品看起来像这样:

enter image description here

我正在发送文字,但它总是返回集合中的所有项目。有什么想法吗?

编辑:看起来它如何处理区分大小写似乎很奇怪。当我输入说,Eth,它给了我所有的记录,但当我输入" eth"它给了我11条记录。哪个也错了。或者至少我不明白搜索是怎么回事。

1 个答案:

答案 0 :(得分:0)

假设“name”字段是识别每个条目的一种方法,请尝试将您存储在名称中的数据类型更改为整数而不是字符串(或者您可以添加另一个字段来存储一个唯一数量的条目,并根据该查询执行查询。我相信当你使用isGreaterThanOrEqualTo它比较每个字符的ascii代码而不是它的真实值或字符的词典顺序时,这就是为什么你在写“Eth”或“eth”时会得到不同的结果。

在ascii代码中,“E”与“e”不同。