javascript Firestore在OrderBy上使用同等过滤器和上级过滤器

4si2a6ki  于 2023-04-28  发布在  Java
关注(0)|答案(2)|浏览(127)

我正在尝试进行Firestore查询,以获取所有传入的会议。有些会议有date,有些则没有(稍后再安排)。以下是我当前的查询:

query(
  collection,
  orderBy('date'),
  or(where('date', '==', null), where('date', '>=', new Date()))
);

但是,当我运行这个查询时,我得到了一个错误:
ORDERBY子句不能包含具有相等筛选日期的字段
在某些情况下我理解这个错误,但是我有一个OR条件,它应该处理这两种情况。
为了提供一些额外的上下文,我使用Cloud Firestore和前端客户端来查询数据库。我试过使用不同的方法和查询,但我还没有能够找到一个解决方案。
我还查看了Firestore文档和其他资源以寻求帮助,但我怀疑这可能是一个bug。
如果任何人有任何关于如何按日期排序结果的想法,同时仍然包括没有日期的会议,我将不胜感激。谢谢大家。

nwo49xxi

nwo49xxi1#

你为什么不把这两个分开

const getScheduledWithoutDate = query(
  collection,
  where('date', '==', null),
);

const getScheduledWithDate = query(
  collection,
  where('date', '!==', null), 
  where('date', '>=', new Date()))
);

注意语法是不正确的,我只是想得到的点,然后在本地排序

nuypyhwy

nuypyhwy2#

从Firestore文档中的查询限制列表中:
不能按包含在equality(==)或in子句中的字段对查询进行排序。
实际上,我不确定为什么会有这个限制,所以我会四处打听--但它似乎并不像你期望的那样是一个bug。
是否有可能重写查询以使用!=而不是==

query(
  collection,
  orderBy('date'),
  where('date', '!=', null), 
  where('date', '>=', new Date())
);

事实上,它可能已经适用于最后一个条件,因为null不是一个实际的日期值:

query(
  collection,
  orderBy('date'),
  where('date', '>=', new Date())
);

相关问题