【发布时间】:2019-12-18 14:43:30
【问题描述】:
我的数据库结构如下:
posts:
pid1:
timestamp: 111
pod:
title: "eggs"
pid2:
timestamp: 222
pod:
title: "milk"
pid3:
timestamp: 333
pod:
title: "bread"
users_posts:
uid1:
pid1: true
pid2: true
我想获取所有uid1 的帖子,其中title 包含特定的子字符串。
例如:
输入: 子字符串:“gs”,用户ID:uid1
输出:pid1
最好的方法是什么?
这是我目前所做的:
func queryPosts(withSearchText searchText: String, userId: String, completion: @escaping (Post) -> Void) {
REF_USER_POSTS.child(userId).observeSingleEvent(of: .value) { (snapshot) in
let ids = (snapshot.value as! [String: Any]).keys
for id in ids {
REF_POSTS.child(id).observeSingleEvent(of: .value) { (snapshot) in
if let dict = snapshot.value as? [String: Any],
let title = ((dict["pod"] as? [String: Any])?["title"] as? String)?,
title.contains(searchText) {
print("found result", id)
}
}
}
}
}
【问题讨论】:
-
不能在firestore中检查子串,因为这是firestore的限制,但是你可以集成algolia来检查子串firebase.google.com/docs/firestore/solutions/search
-
感谢您的回答,所以如果我使用完整字符串,而不是子字符串。仅查询特定用户帖子的最佳方法是什么?循环?还是 firebase 提供了比我上面所做的更有效的其他方法? @ked
-
在这种情况下,您将不得不稍微修改您的数据库结构,我将在一段时间内编写下面的解决方案,并且我将在 kotlin 中编写 firestore 查询,我希望那会是足以理解逻辑
-
检查下面的解决方案,我猜你使用的是firestore,但如果你使用的是实时数据库,你不能在实时数据库上进行查询
-
@ked 我可能误解了您的评论,但您当然可以查询实时数据库。见Sorting and filtering data。如果您需要更深层次的查询,可以通过深度查询来完成。见Ordering by deep paths
标签: swift firebase firebase-realtime-database