【问题标题】:Firebase querying by date range always returns empty arrayFirebase 按日期范围查询始终返回空数组
【发布时间】:2020-06-24 23:51:06
【问题描述】:

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

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

这是我的查询 sn-p:

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

我是 firebase 的新手,所以我不知道我在哪里失踪,文档也没有太大帮助。 另外,如果信息有帮助,我正在使用云功能。

【问题讨论】:

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


    【解决方案1】:

    您传递给startAtendAt 的值必须与您用于排序的字段相对应。由于您在 payment_type 上订购,因此 start 和 end 值没有意义 - 他们正在寻找根本不匹配 payment_type 值的值范围。此外,除非您尝试使用 pagination,否则使用 startAtendAt 是没有意义的,它看起来不像您在这里。

    如果您尝试在两个日期之间进行范围查询,然后按 payment_type 对结果进行排序,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()
    

    如果需要,可以按 payment_type 在客户端对结果进行排序。

    【讨论】:

    • 嗨,道格!感谢您的帮助。我按照你的建议使用 where('date', '>', '2020-06-22') 和 where('date', '
    • 这是一个标准范围查询,如文档中所述:firebase.google.com/docs/firestore/query-data/…
    • 我还要指出,如果您的日期字段实际上不是您在 JSON 中显示的字符串,那么您将无法像这样使用格式化字符串查询它。如果它实际上是一个时间戳,那么您需要在查询中提供 Date 或 Timestamp 对象。
    • 嗯,你是对的,我没有保存为字符串,而是保存为时间戳,并在使用 toDate() 函数发送到客户端之前对其进行转换。如何在我的 Firestore 中查询时间戳?
    • 正如我所说,您需要为查询提供日期或时间戳对象而不是字符串。
    【解决方案2】:

    您按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 日。

    【讨论】:

    • 嗨,阳光!谢谢您的回答。我按照你的建议做了,不幸的是它没有用。 ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2018-04-10
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多