Firestore时间戳查询

6

如果字段是文本类型,我可以使用where条件获取数据,但是当我尝试对时间戳字段和日期使用相同的方法时,它们不起作用。

这是我的代码:

home.ts

firebase.firestore().collection("cities").where("timestamp", ">", "3/24/2020")
    .onSnapshot(function(querySnapshot) {
        var cities = [];
        querySnapshot.forEach(function(doc) {
            cities.push(doc.data().name);
        });
        console.log("Timestamp greather than 3/24/2020 -- ", cities.join(", "));
    });

firebase.firestore().collection("cities").where("state", "==", "CA") 运行正常,但对于 date 却不行。

fire storage 的截图如下:

enter image description here

注意: 控制台应该返回 JLD 文档,因为它的 timestamp 值大于 3/24/2020

Edit 1

根据 @alex 的指引,我现在这样做:

let start = new Date('2020-03-25'); firebase.firestore().collection("cities").where("timestamp", ">", start)

但是我使用 > 时,它包括了 2020-03-25 的数据,为什么?

1个回答

13
我试图对时间戳字段进行相同的操作,但是日期无法正常工作。这是因为您正在将不正确的字符串传递给`where(“timestamp”,“>”,“3/24/2020”)`,因为数据库中的`timestamp`属性保存的是一个`Date`对象而不是一个字符串。要解决此问题,请将日期作为`Date`对象传递而不是字符串(“3/24/2020”),那么一切都会正常工作。
let timestamp = new Date('2020-03-25');

然后使用:

firebase.firestore().collection("cities").where("timestamp", ">", timestamp);

我正在尝试,我会回来的。 - user2828442
new Date('2020-03-25') 创建一个时间,时、分和秒的值为 00。由于你数据库中的时间设置为 下午4点,因此你得到了正确的结果。 - Alex Mamo
我没听懂你的意思,使用 new Date('2020-03-25') 我得到了一个记录,它是 2020-03-25,我该如何避免这种情况? - user2828442
当您创建一个仅传递年、月和日的日期对象时,小时、分钟和秒将设置为“00”。这与创建以下日期对象相同:new Date('2020-03-25 00:00:00')。由于数据库中的日期对象具有下午4点的时间,因此获得该结果是正常的,因为下午4点在“00:00:00”之后,对吧? - Alex Mamo
非常感谢,我可以问你一些问题吗?我正在尝试学习Firestore中的查询,并且遇到了一些小问题。如果可能的话,我能在Skype、Hangout、Slack或其他任何地方与您联系吗?如果我遇到困难,您能给我一些指导吗?我不会打扰您的。 - user2828442
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接