2016-01-18 16 views
1

我想查找到昨天为止创建的所有用户。这是我的代码,以使查询字符串:Mongoose.js在数据库中找到昨天的日期

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

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

任何帮助?非常感谢你!

回答

1

您在前端生成一个日期,然后把它推回去了一天,这是一个很大的情况完全正常 -

对于这一点,因为你正在努力寻找所发生DB项,也许试着用从数据库中每个文档的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

一些伪代码:

1. Query documents in the database 
2. Get a timestamp from the ID's of the documents in the database 
3. Set a range of the timestamps 
4. Compare returned timestamps vs a timestamp range variable (yesterdays date in this case) 
5. Have the DB return only documents that are within the range 

我希望这有助于!

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'); 
1

试试这个,用Moment.js

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