【问题标题】:Firestore ordering query not working like firebase?Firestore 订购查询不像 Firebase 那样工作?
【发布时间】: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


【解决方案1】:

本质上,我只是添加了一个 whereField 使得 watchBy/UID 存在。

let postsReference = Firestore.firestore().collection("posts") 
let watchingQuery = postsReference.whereField("watchedBy."+(UID!), isGreaterThan:"")

编辑:

注意变化

"/watchedBy/" + UID!

到格式正确的 Firestore 子引用

"watchedBy."+(UID!)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2017-05-06
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多