【发布时间】:2021-10-06 21:47:38
【问题描述】:
我想在collection 中进行Firestore 调用,其中不包括字段上的某些值。这是我写的sn-p代码
db.collection("MyCollection")
.order(by: "timestamp", descending: false)
.whereField("timestamp", isGreaterThan: localTimestamp)
.whereField("uid", notIn: [reportedUids, currentUid])
.limit(to: 3)
.getDocuments { (snapshot, error) in
if let err = error{
print(err.localizedDescription)
return
}
var modelsData = [Model]()
snapshot?.documents.forEach({ (doc) in
let dict = doc.data()
var model = Model()
model.transformModelWith(dict: dict)
modelsData.append(model)
})
let lastDocumentFetched = snapshot?.documents.last
DispatchQueue.main.async {
completion(modelsData, lastDocumentFetched!)
}
}
}
运行时我得到的错误是:
查询无效。您在字段 'uid' 上有一个不等式(notEqual、lessThan、lessThanOrEqual、greaterThan 或 greaterThanOrEqual)的 where 过滤器,因此您还必须使用 'uid' 作为您的第一个 queryOrderedBy 字段,但您的第一个 queryOrderedBy 当前位于字段 'timestamp ' 代替。'
在网上搜索它给我带来了here,我的问题是:
如果我必须从查询中排除一些数据,我该如何解决这个问题?
【问题讨论】:
-
一次一个问题,赞成。
-
改了,现在是一个,@ElTomato
-
带有“here”的上述主题表明您必须选择“order”或“whereField”,但同时选择两者。您可以自己按“时间戳”的顺序对数组进行排序,不是吗?
-
Frank van Puffelen 给出了解决方案。所以一定是对的。
-
更正:“但两者”->“但不是两者”
标签: swift google-cloud-firestore