如果我的记录有created_date字段,是否有一种简单的方法可以获取在7天内创建的所有记录而无需手动计算和添加开始日期和结束日期?
答案 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}})
相当多的代码,但至少你不需要做日期算术。