如何在Firestore中查询datetime == datetime的文档

时间:2020-06-10 15:10:11

标签: node.js google-cloud-firestore

我在尝试使用DateTime对象查询文档时遇到问题

路径/ users / {userId} / payments / {paymentDoc}中的文档 我有这样的文档结构

Document data: { 
  banking: '',
  isPaid: false,
  endDate: Timestamp { _seconds: 1592179200, _nanoseconds: 0 },
  startDate: Timestamp { _seconds: 1590969600, _nanoseconds: 0 }, **June 1, 2020 at 7:00:00 AM UTC+7**
  totalIncome: 100 
} 

我尝试查询文档的位置

firstDayOfMonth = new Date(2020, 05, 01) **maybe wrong here?**
userPaymentRef = db.collection('users')
  .doc(userId)
  .collection('payments')
  .where('startDate', '==', firstDayOfMonth)
  .get()
  .then(function (doc) {
    if (doc.exists) {
      console.log("Document data:", doc.data());
      return true;
    } else {
      console.log("No such document!");
      return false;
    }
 }).catch(function (error) {
     console.log("Error getting document:", error);
 });

但是在firebase函数中记录其所说的没有这样的文件!

我尝试记录存储的startDate的时间戳和要查询的日期的时间戳。一样,但是说“没有这样的文档”是我的查询错了吗?或我要查询的DateTime错误?

编辑: 功能日志

我存储的文档的时间戳和DateTime的时间戳匹配,但是找不到文档

enter image description here

1 个答案:

答案 0 :(得分:1)

如果文档中有一个时间戳字段,则只能与其他Date或Timestamp对象完全匹配。精确到纳秒的精度必须匹配。同一天但一天中不同时间的两个时间戳不相等。

还请记住,时间戳记对象不对时区进行编码-它们始终使用UTC。如果使用Date对象,则必须使用与时间戳记完全相同的时间来创建它,以便获得相等匹配。未指定准确时间的日期对象将使用本地计算机的时间戳,这绝对不能保证与任何其他计算机上的一天中的时间相匹配。

最重要的是:如果要使两个时间戳相等,则它们都必须代表精确相同的时间(以纳秒为单位)