有没有一种简单的方法来获取MongoDB中最近N天的记录?

时间:2013-07-17 03:16:15

标签: mongodb

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

2 个答案:

答案 0 :(得分:3)

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

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

除此之外,如果您需要服务器的确切日期,您可以像这样获取它:

db.eval( function() { return new Date() } ); 

使用大多数驱动程序,您应该能够使用$eval命令完成此操作。

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

答案 1 :(得分:3)

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

> 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}})

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