首页 > 解决方案 > Firestore 订购查询不像 Firebase 那样工作?

问题描述

我观察帖子的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 转换似乎不起作用。

标签: swiftfirebasefirebase-realtime-databasegoogle-cloud-firestore

解决方案


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

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

编辑:

注意从

"/watchedBy/" + UID!

到格式正确的 Firestore 子引用

"watchedBy."+(UID!)

推荐阅读