Mongoose.js在数据库中找到昨天的日期

时间:2016-01-18 18:03:33

标签: javascript node.js mongodb mongoose database

我想找到昨天创建的所有用户。这是我制作查询字符串的代码:

var today = new Date();
var a = today.getDate();
a--;
today.setDate(a);
var yesterday = today.toDateString();

它返回类似于:2016年1月17日星期日...这是昨天的日期,但是数据库以iso格式存储日期,如:"date" : ISODate("2016-01-13T13:23:08.419Z")所以我得到的是2016-01-13T13:23:08.419Z。我现在的问题是我不能使用昨天变量来查询我需要的用户的数据库,即使我可以,我也不知道如何查找每个注册,不包括今天发生的注册。

有任何帮助吗?非常感谢你!

3 个答案:

答案 0 :(得分:2)

您正在前端生成一个日期,然后将其推回一天,这在很多情况下完全没问题 -

为此,由于您正在尝试查找发生的数据库条目,因此可能尝试使用从数据库中每个文档的ID中拉出的时间戳来查询数据库。

以下是有关如何从mongoDB执行此操作的一些文档。 https://docs.mongodb.org/v3.0/reference/method/ObjectId.getTimestamp/

我还提供了一些额外的资源,可以帮助您确定要查询的方法:

https://steveridout.github.io/mongo-object-time/

https://gist.github.com/tebemis/0e55aa0089e928f362d9

一些伪代码:

$(this).attr('upc')

我希望这有帮助!

答案 1 :(得分:1)

尝试使用Moment.js

yesterday = moment().add(-1, 'days');
db.users.find({ "date": { "$lt": yesterday }});

答案 2 :(得分:0)

创建一个代表今天开始的日期对象,使用它来查询集合中date字段小于该变量的文档,如下例所示

var start = new Date();
start.setHours(0,0,0,0);

db.users.find({ "date": { "$lt": start }});

这将查找昨天结束前创建的用户。

momentjs 是一个非常方便的实用程序,用于执行此类操作。使用该库,这可以通过当前日期对象上的startOf()方法实现,并将字符串'day'作为参数传递:

本地GMT:

var start = moment().startOf('day'); // set to 12:00 am today
db.users.find({ "date": { "$lt": start }});

For UTC:

var start = moment.utc().startOf('day');