【问题标题】:Firestore says I have inequality filter on multiple properties, when I don'tFirestore 说我在多个属性上都有不等式过滤器,而我没有
【发布时间】:2019-11-10 08:30:36
【问题描述】:

我正在尝试做一个“小技巧”来避免每次页面加载时都阅读用户文档。所以我将它保存在本地,每次加载页面时,我都会获取本地版本,获取updated_at 属性,然后执行WHERE last_updated > {{updated_at}} 之类的操作。为此,我想使用这个:

firebase.firestore().collection('User')
.where(firebase.firestore.FieldPath.documentId(), '==', firebase.auth().currentUser.uid)
.where('updated_at', '>', updated_at)
.get()

如您所见,我有一个等式 (==) 和一个不等式 (>)。为什么我在控制台上会出现以下错误:

FirebaseError: Cannot have inequality filters on multiple properties: updated_at
    at new t (https://www.gstatic.com/firebasejs/6.0.2/firebase-firestore.js:1:47054)
    at t.fromRpcStatus (https://www.gstatic.com/firebasejs/6.0.2/firebase-firestore.js:1:116660)
    at t.fromWatchChange (https://www.gstatic.com/firebasejs/6.0.2/firebase-firestore.js:1:125914)
    at t.onMessage (https://www.gstatic.com/firebasejs/6.0.2/firebase-firestore.js:1:242411)
    at https://www.gstatic.com/firebasejs/6.0.2/firebase-firestore.js:1:241212
    at https://www.gstatic.com/firebasejs/6.0.2/firebase-firestore.js:1:241997
    at https://www.gstatic.com/firebasejs/6.0.2/firebase-firestore.js:1:144869

如果本地版本与数据库中的版本相同,我这样做是为了避免从数据库中读取。如果您有更好的方法,请告诉我。

谢谢

【问题讨论】:

  • firebaser here 我刚刚在jsbin.com/zexapuv/edit?js,console 中重现了这种行为,并询问为什么这些过滤器会触发该错误。我唯一能想到的是 documentId() 有点特殊,但在这种情况下,我希望得到关于该字段的更明确的错误消息。

标签: javascript firebase google-cloud-firestore


【解决方案1】:

firebaser 在这里

您对documentId() 进行的相等性检查在内部转换为 Firestore 的范围检查,因为键存储为现有索引中的最后一项(如果我理解正确的话)。这意味着您在服务器端尝试执行两次不等式/范围检查,这是不允许的。

所以你看到的行为是正确的。但这绝对不直观,错误消息也没有帮助。我们将寻找一种方法来通过检测这种组合来改进错误消息。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我实施了以下 hack:我将 id 添加为我检查最新版本的字段名称的一部分。如果你的逻辑允许你这样做,对你来说这意味着:

    firebase.firestore().collection('User')
    .where(id + '_updated_at', '>', updated_at)
    .get()
    

    这允许在一个 where 语句中捆绑对 id 和日期的检查(具有不同 id 的文档不会有 id + '_updated_at' 字段,因此不会被选中)。

    对我来说就像一个魅力

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      相关资源
      最近更新 更多