想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它.
关闭 2 年前。
目前,我的客户端 (iOS/Swift) 正在通过过滤 whereField(...)
来获取文档,然后根据其他几个字段进一步过滤结果。这意味着一些对象被获取,然后被丢弃,浪费了宝贵的资源和带宽!
我可以在 firestore 云函数上执行这种复杂的过滤,而不是以某种方式将过滤后的结果解析到客户端上的同一个 firestore 对象中吗?明确地说,我知道如何编写云函数来获取和返回文件,我更感兴趣的是了解给客户的运输方式。
提供一些上下文的代码片段:
static func unmatchedChatsHelper(cursor: Any?, promise: @escaping (Result<UnmatchedChatsCursorResponse, Never>) -> Void) {
let earliestEventTime = Date()
// (1) Filtering done on backend.
var query = Firestore.firestore().collection("chats")
.whereField("eventTime", isGreaterThan: earliestEventTime)
.order(by: "eventTime")
.order(by: "createdAt", descending: true)
if let cursor = cursor as? DocumentSnapshot {
query = query.start(afterDocument: cursor)
}
query.getDocuments { (querySnapshot, error) in
guard let querySnapshot = querySnapshot else {
fatalError("Query snapshot failed: \(error?.localizedDescription ?? "no error")")
}
let transformedModels = querySnapshot.documents.compactMap { (chatQueryDocumentSnapshot) -> ChatModelFirebase? in
do {
return try chatQueryDocumentSnapshot.data(as: ChatModelFirebase.self)!
} catch let error {
logEvent(AnalyticsEventDidDropDocument, [
"document_id": chatQueryDocumentSnapshot.documentID
], error)
return nil
}
}
let me = Auth.auth().currentUser!.uid
// (2) Filtering done on client! This means some chats are retrieved unnecessarily.
let unmatchedChats = transformedModels.filter {
!$0.participants.contains(me)
&& $0.numParticipants < 6
&& !$0.declinedParticipants.contains(me)
&& $0.isDebug == DebugGating.isDebugBuild()
}
let cursor = querySnapshot.documents.last
promise(.success(UnmatchedChatsCursorResponse(models: unmatchedChats, cursor: cursor as Any)))
}
}
我有三个选择:
Firestore.Decoder
解析结果 ChatModelFirebase
。ChatModelFirebase
中。whereField(..)
完成所有查询,但这很复杂,因为 whereField
的选项有限。还有什么我想念的吗?有更好的方法吗?
相关文章:
php - 使用 Laravel 的 Eloquent 将数据发送到数据库的问题
laravel - 如何在 Laravel 中显示带有法语符号的验证消息?
java - 使用 Spring WebClient 重复过滤响应
python - 如何使用 Elasticsearch-dsl 在 Django 中进行并行测试?
reactjs - react : Fix missing dependency warning u
android - 使用 Jetpack Navigation 在深度链接 URI 中使用字符串常量
angular - 在 Angular 10 中将 HTML 转换为 PDF