有没有一种简单的方法可以从MongoDB中获取过去N天的记录?

有没有一种简单的方法可以从MongoDB中获取过去N天的记录?,mongodb,Mongodb,如果我的记录有一个created_date字段,是否有一种简单的方法可以获取7天内创建的所有记录,而不需要手动计算和添加开始日期和结束日期?Mongo没有SQLNOW()这样的符号日期,您可以在客户端上使用,并在服务器上进行评估 解决问题的最佳方法是评估客户机上的日期。在您的特定情况下,由于记录不会在将来创建,您可能只需要计算客户机中的“现在减去7天”,然后将该日期输入查询中 顺便说一句,如果您需要从服务器获取确切日期,可以如下方式获取: db.eval( function() { return

如果我的记录有一个created_date字段,是否有一种简单的方法可以获取7天内创建的所有记录,而不需要手动计算和添加开始日期和结束日期?

Mongo没有SQL
NOW()
这样的符号日期,您可以在客户端上使用,并在服务器上进行评估

解决问题的最佳方法是评估客户机上的日期。在您的特定情况下,由于记录不会在将来创建,您可能只需要计算客户机中的“现在减去7天”,然后将该日期输入查询中

顺便说一句,如果您需要从服务器获取确切日期,可以如下方式获取:

db.eval( function() { return new Date() } ); 
使用大多数驱动程序,您应该能够使用
$eval
命令来实现这一点


最后,您可以使用
where()
表达式在服务器上完全实现这一点。但是,我不推荐这种方法。这样的查询不能利用索引,因此必须反序列化集合中的每个记录。除非你的藏品很小,否则它们很慢。但是,如果您想采用这种方法,您可以在JavaScript中为
where()
表达式使用
new Date()

在mongo控制台中尝试类似的操作,以返回在过去7天内创建的记录(假设创建日期是插入日期):


相当多的代码行,但至少你不必做日期算术。

创建一个额外的TTL集合,7天到期。
> startDate = new Date()  // Current date
> startDate.setDate(startDate.getDate()-7) // Subtract 7 days
> startDate.setHours(0)   // Set the hour, minute and second components to 0
> startDate.setMinutes(0)
> startDate.setSeconds(0)
> db.mycollection.find({created_date:{$gte: startDate}})