4

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

4

2 回答 2

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

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

于 2013-07-17T04:21:28.643 回答
3

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

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

顺便说一句,如果您需要来自服务器的确切日期,您可以像这样获取它:

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

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

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

于 2013-07-17T03:30:07.703 回答