swift Firestore“无效查询”

qvsjd97n  于 2023-03-28  发布在  Swift
关注(0)|答案(2)|浏览(98)

我提出以下查询:

db.collection("XXX")
                .whereField("place", isEqualTo: selectedPlace)
                .whereField("peoples", in: selectedPeoples)
                .whereField("price", isLessThan: priceUpperValue)
                .whereField("price", isGreaterThan: priceLowerValue)
                .order(by: "date", descending: true)

我得到了以下错误:

Terminating app due to uncaught exception
'FIRInvalidArgumentException', reason: 'Invalid query. You have a
where filter with an inequality (lessThan, lessThanOrEqual,
greaterThan, or greaterThanOrEqual) on field 'price' and so you must
also use 'price' as your first queryOrderedBy field, but your first
queryOrderedBy is currently on field 'date' instead.'

我哪里做错了?

xzlaal3s

xzlaal3s1#

错误信息告诉您,您不能对与范围筛选器不同的字段进行排序。您的排序是在“日期”上,而范围筛选器是在“价格”上。这是不允许的。
我建议查看有关查询限制的文档:
如果包含一个带有范围比较(〈,〈=,〉,〉=)的筛选器,则第一次排序必须在同一字段上。

ttcibm8c

ttcibm8c2#

我也遇到了同样的问题。虽然Firebase文档说你不能这样做,但我找到了一种方法,它可以工作。只是你需要添加一个订单(通过:“价格”)之前的订单(由:“date”)。别担心,它将按最后一个排序,即“date”而不是“price”。
你可以看到我的代码工作:

let queryBoxes = self.db.collection(collection)
            .whereField("dueDate", isGreaterThan: Date())
                                  .order(by: "dueDate")
                                  .order(by: "addedDate", descending: true)
.getDocuments { querySnapshot, error in
                guard let documents = querySnapshot?.documents else {
                    print("Error getting documents: \(String(describing: error?.localizedDescription))")
                    return
                }
// ...

但我不确定是否安全,如果有人知道他们能警告吗?

相关问题