Firebase按日期范围查询始终返回空数组

时间:2020-06-24 23:51:06

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

在我的数据库中,我保存了该月23日的所有文档,如下图所示

enter image description here

即使我在第20天超过了开始日期,它也会返回空值。

这是我的查询摘要:

const documents = await admin.firestore()
    .collection('orders')
    .orderBy('payment_type')
    .startAt('2020-06-22')
    .endAt('2020-06-23')
    .get()

我是Firebase的新手,所以我不知道我缺少什么,文档也帮不上什么忙。 另外,如果信息有帮助,我正在使用云功能。

2 个答案:

答案 0 :(得分:1)

您传递给startAtendAt的值必须与您用于订购的字段相对应。由于您要按Payment_type进行订购,因此开始值和结束值没有意义-他们正在寻找的值范围根本不匹配所有payment_type值。另外,除非您尝试进行pagination,否则使用startAtendAt没有任何意义,

如果您尝试在两个日期之间进行范围查询,然后按付款类型对结果进行排序,那么使用现有数据的Firestore实际上是不可能的。您不能在与要订购的字段不同的字段上进行范围查询。请注意limitation in the documentation

如果您包含具有范围比较(<,<=,>,> =)的过滤器,则您的 第一次订购必须在同一字段上:

citiesRef.where("population", ">", 100000).orderBy("population")

因此,您可以尝试按日期查询范围:

const documents = await admin.firestore()
    .collection('orders')
    .where('date', '>', '2020-06-22')
    .where('date', '<', '2020-06-23')
    .get()

如果需要,可以按付款方式在客户端上对结果进行排序。

答案 1 :(得分:0)

您要按payment_type排序,这不是日期值。建议您将其更新为date,以便相应的startAtendAt函数将定位到正确的字段。 Documentation

const documents = await admin.firestore()
    .collection('orders')
    .orderBy('date')
    .startAt('2020-06-22')
    .endAt('2020-06-25')
    .get()

此外,将endAt的值扩展到6月24日。