如果我的记录有 created_date 字段,是否有一种简单的方法可以获取在 7 天内创建的所有记录,而无需手动计算和添加开始日期和结束日期?
问问题
3632 次
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 回答