【发布时间】:2015-12-05 09:40:04
【问题描述】:
我正在尝试获取在某些日期分组的某些项目的计数。 这是使用以下聚合查询:
// this query works, without matching dates
[
{'$match': {
'some_id': ObjectId('foobar'),
'some_boolean_value': true
}
},
{'$project':
{'day':
{'$substr': ['$some_date', 0, 10]}}
},
{'$group': {_id: '$day', count: { '$sum': 1 }}},
{'$sort': {_id: -1}}
]
下一步是我想使用这个查询,但有日期限制。 我想要在某些日期限制之间每天分组的计数。
// the query below does not work as soon as date matching is added
// this query always return 0 documents
[
{'$match': {
'some_id': ObjectId('foobar'),
'some_boolean_value': true,
'some_date':
{
'$gte': '2015-08-01T00:00:00.000Z',
'$lte': '2015-08-31T23:59:59.999Z'
}
}
},
{'$project':
{'day':
{'$substr': ['$some_date', 0, 10]}}
},
{'$group': {_id: '$day', count: { '$sum': 1 }}},
{'$sort': {_id: -1}}
]
【问题讨论】:
-
您正在使用“字符串”。您的文档是否包含“字符串”或它们是否包含
Date对象。 -
@BlakesSeven 它们包含
Date对象,我只是以实际日期为例。 -
那么你不要在不是“字符串”的东西上使用
$substr。这应该很清楚。 -
您需要将字符串包装在 ISODate() 中
标签: mongodb mongoose mongodb-query aggregation-framework