【问题标题】:Firebase Firestore: Issues with combining exclusion query and sortingFirebase Firestore:结合排除查询和排序的问题
【发布时间】:2021-05-02 05:59:33
【问题描述】:

以下是我想要对 Firestore 数据库执行的操作:

  1. 从“posts”集合中查询,该集合包含以下字段:“userid”、“time”和“listid”。

  2. 查询最近4个包含目标userid变量且'listid'值不等于目标listid变量的文档。

这是我的初始查询,它提出了错误消息:'不等式过滤器属性和第一排序顺序必须相同'

 return db.collection('posts').where('userid','==',targetuserid)
     .where('listid','!=',targetlistid)
     .orderBy("time","desc")
     limit(4).get()

这是我修改后的查询,它不再触发错误消息。

 return db.collection('posts').where('userid','==',targetuserid)
     .where('listid','!=',targetlistid)
     .orderBy("listid").orderBy("time","desc")
     limit(4).get()

但是,修改后的查询存在以下问题:查询不是返回实际的最新文档,而是首先根据随机生成的“listid”字段进行排序,因此返回很久以前生成的随机文档。

Firestore 查询方法中是否有一种解决方法可以帮助我做我想做的事情,还是在 Firestore 中还不可能,我必须开始考虑替代方案?

谢谢!

【问题讨论】:

    标签: node.js firebase google-cloud-firestore


    【解决方案1】:

    通常,当使用!= 子句时,查询中包含的文档比排除的文档要多得多——在这种情况下, 包含 != 子句(这是一个不等式)可能要容易得多,从而允许您的 orderBy().limit() 工作 - 您可以删除/忽略不想要的客户端代码中的文档。在读取中获取几个“额外”文档(即!= 文档)比必须阅读所有除了您想要排除的少数文档之外的文档要便宜得多。

    != 子句和orderBy() 的问题已成为 StackOverflow 上的一个非常常见的问题 - 老实说,我还没有看到它实际上有用的情况......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-14
      • 2018-11-08
      • 2019-05-27
      • 2014-02-03
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多