【问题标题】:iOS - Invalid Query in FirestoreiOS - Firestore 中的无效查询
【发布时间】:2021-10-06 21:47:38
【问题描述】:

我想在collection 中进行Firestore 调用,其中不包括字段上的某些值。这是我写的sn-p代码

db.collection("MyCollection")
    .order(by: "timestamp", descending: false)
    .whereField("timestamp", isGreaterThan: localTimestamp)
    .whereField("uid", notIn: [reportedUids, currentUid])
    .limit(to: 3)
    .getDocuments { (snapshot, error) in
        if let err = error{
            print(err.localizedDescription)
            return
        }
        var modelsData = [Model]()
        snapshot?.documents.forEach({ (doc) in
            
            let dict = doc.data()
            var model = Model()
            model.transformModelWith(dict: dict)
            modelsData.append(model)
        })
        
        let lastDocumentFetched = snapshot?.documents.last
        DispatchQueue.main.async {
            completion(modelsData, lastDocumentFetched!)
        }
    }
}

运行时我得到的错误是:

查询无效。您在字段 'uid' 上有一个不等式(notEqual、lessThan、lessThanOrEqual、greaterThan 或 greaterThanOrEqual)的 where 过滤器,因此您还必须使用 'uid' 作为您的第一个 queryOrderedBy 字段,但您的第一个 queryOrderedBy 当前位于字段 'timestamp ' 代替。'

在网上搜索它给我带来了here,我的问题是:

如果我必须从查询中排除一些数据,我该如何解决这个问题?

【问题讨论】:

  • 一次一个问题,赞成。
  • 改了,现在是一个,@ElTomato
  • 带有“here”的上述主题表明您必须选择“order”或“whereField”,但同时选择两者。您可以自己按“时间戳”的顺序对数组进行排序,不是吗?
  • Frank van Puffelen 给出了解决方案。所以一定是对的。
  • 更正:“但两者”->“但不是两者”

标签: swift google-cloud-firestore


【解决方案1】:

错误消息说将.whereField("uid", notIn: [reportedUids, currentUid]) 作为第一个过滤器。

【讨论】:

  • 这不是真的,错误消息说无法使用 Firestore 同时使用 2 个不同的字段进行过滤或排序
猜你喜欢
  • 2018-12-15
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
相关资源
最近更新 更多