【问题标题】:Firebase querying by date not working after deployFirebase 按日期查询在部署后不起作用
【发布时间】:2020-10-17 16:26:18
【问题描述】:

我正在使用 firebase 开发 REST API,并且正在按日期查询一些数据。它在本地主机上工作正常,但部署后,它就不行了!我也在使用 momentjs 来帮助处理日期。

我的文档的日期字段是时间戳。

这是我的查询方式:

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

我也用 Date() 而不是 momentjs 做了同样的事情

const documents = await admin.firestore()
  .collection('orders')
  .where('date', '>', new Date('Jun 23 2020'))
  .where('date', '<', new Date('Jun 24 2020'))
  .get()

它们都在 localhost 上运行良好,但部署后从第 23 天获取数据的唯一方法是在查询中通过第 24 天和第 25 天,如下所示:

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

我的数据库中保存的部分数据:

我只想获取特定日期的数据,我做错了什么?

【问题讨论】:

  • 当您说“它在 localhost 上运行良好”时,您的意思是查询在针对本地 Firestore 模拟器运行时可以正常工作吗?
  • 正如我在您的其他问题中提到的,您需要显示您正在查询的源数据。在不知道您期望从实际数据中返回什么的情况下,我们无法查看您的查询是否确实在做正确的事情。请编辑问题以包含任何人都可以用来重现问题的足够信息。这可能涉及与您的查询匹配和不匹配的数据的屏幕截图。
  • @FrankvanPuffelen 是的,如果我运行 firebase deploy 并尝试它,结果会有所不同
  • @DougStevenson 我已经更新并添加了一些图片,希望对您有所帮助
  • 感谢您的澄清。基于此,我认为这很可能是时区问题,因为您的本地计算机可能在与 Cloud Firestore(第二个屏幕截图中的 URC-3)不同的时区运行。考虑在构造数据时设置时区,以便基础值与数据库中存储的值相匹配。

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


【解决方案1】:

当您在 JavaScript 中创建 Date 对象而不指定特定时间时,它使用运行代码的机器的时区使用提供日期的午夜。您的计算机对午夜的感觉将不同于其他时区的其他计算机。

为了以可预测的方式执行此查询,无论时区如何,您都必须想出一个特定的时刻,并在查询中使用它。

请注意,您在 Firebase 控制台中看到的时间戳已格式化为使用本地计算机的时区意义。 Firestore 中的时间戳实际上没有任何时区 - 它们都以 UTC 度量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    相关资源
    最近更新 更多