mongodb中的查询日期

问题描述:

我试图通过日期范围查询我的集合。我米试图通过JavaScript日期查询中使用ISODate,它不工作,我不知道为什么......mongodb中的查询日期

我曾尝试:

db.collection.aggregate {date: {$gt: 'new Date(' + start.toISOString() + ')', $lt: 'new Date(' + end.toISOString() + ')'}}, {"$group": {_id: "$user", count: {$sum: 1}}} 

db.collection.aggregate {date: {$gt: 'ISODate(' + start.toISOString() + ')', $lt: 'ISODate(' + end.toISOString() + ')'}}, {"$group": {_id: "$user", count: {$sum: 1}}} 

db.collection.aggregate {date: {$gt: 'ISODate(' + start + ')', $lt: 'ISODate(' + end + ')'}}, {"$group": {_id: "$user", count: {$sum: 1}}} 

db.collection.aggregate {date: {$gt:start, $lt: end}}, {"$group": {_id: "$user", count: {$sum: 1}}} 

没有什么工作...

你能帮我吗?或者解释一下为什么它在每种情况下都不起作用?

+0

可能重复([MongoDB的/猫鼬查询在某一特定日期?] http://*.com/questions/11973304/mongodb-mongoose-querying-at-a-specific-date) – RickyA 2014-10-20 14:55:30

为什么你把Date构造函数当作字符串并且连接它与start,end值?将Date对象与"new Date(2014-10-20T15:27:24.110Z)"这样的字符串进行比较是无法正常工作的。

如果startend是普通的JavaScript Date对象,你可以使用ISODate帮手,像这样构造ISODate对象进行比较:

db.collection.aggregate([ 
    {$match: {date: { 
     $gt: ISODate(start.toISOString()), 
     $lt: ISODate(end.toISOString()) 
    }}}, 
    {$group: {_id: "$user", count: {$sum: 1}}} 
]) 
+0

开始和结束都是javascript日期。我会尝试明天谢谢 – mfrachet 2014-10-20 16:37:05

+0

@Skahrz好的,回答相应更新。 – famousgarkin 2014-10-20 19:33:50