【发布时间】:2018-12-14 14:51:31
【问题描述】:
我观察帖子的firebase模型是这样的:
let postReference = Database.database().reference().child("posts")
let watchedByQuery = postReference.queryOrdered(byChild: "/watchedBy/" + UID!).queryStarting(atValue: "")
但是,当我尝试将其转换为 Firestore 时,
let postsReference = Firestore.firestore().collection("posts")
let watchingQuery = postsReference.order(by: "/watchedBy/" + UID!).start(at: [""])
watchingQuery.addSnapshotListener { (querySnapshot, error) in
guard let snapshot = querySnapshot else {
print("Error fetching snapshots: \(error!)")
return
}
snapshot.documentChanges.forEach { diff in
我收到错误Invalid field path (/watchedBy/P02bS6QrVE122yjrU7L87X2). Paths must not contain '~', '*', '/', '[', or ']''
似乎是什么问题?本质上,该查询会检查在 watchBy 部分中具有用户 ID 的帖子。但是,FireStore 转换似乎不起作用。
【问题讨论】:
-
let watchingQuery = postsReference.order(by: "watchedBy.\(UID!)").start(at: [""])。这是正确的实现吗? -
我把它改成了那个,但是查询工作但没有返回任何东西......对于firebase,我必须让它从“”开始,因为值可能会改变。火风暴也可以这样吗?
-
我建议像这样实现您的代码 db.collection("posts").whereField("watchedBy", isEqualTo: UID!) 另外,您可能希望避免添加额外的路径组件,因为 Firebase/Firestore 会像这样 let watchByReference = db.document("posts/watchedBy")
-
@Jay,您建议的第一个实现不起作用,因为watchedBy 是一个子集合,其中包含该帖子所针对的用户的所有用户ID,例如'posts/posID/watchedBy/ user1:是的,user2:true.....我让它像这样工作
let postsReference = Firestore.firestore().collection("posts") let watchingQuery = postsReference.whereField("watchedBy."+(UID!), isGreaterThan:"") -
这更像是一种阅读收藏的格式。您显然可以继续增加阅读的深度以获得您想要的特定内容。所以看起来它现在正在工作?如果是这样,您可能希望将其添加为您自己的问题的答案,供未来的读者参考。
标签: swift firebase firebase-realtime-database google-cloud-firestore