我有一个mongodb数据库,其中文档的每一行都有一个日期字段(格式ISO日期)。
我正在尝试在日期字段中访问小时和分钟,并且,对于每小时的每分钟,显示行数(通知可以是一分钟的多行)。输出将是这样的:
11:20 5
11:41 1
13:20 8
15:30 11
第一列是时间(小时:分钟),第二列是与该时间对应的行数。
这是我在mongodb中执行的命令:
db.user.aggregate([{$group: {_id: {hora: {$hour: '$created_at'}, minuto: {$minute: '$created_at'}}, total: {$sum: 1}}}])
其中' hora'是显示小时和'minuto'的字段。显示分钟的字段。
这是我得到的消息:
答案 0 :(得分:1)
您似乎没有将日期存储为ISODate
,而是将其存储为ISODate格式的字符串。
当您运行find
查询时,它应该显示为
"created_at" : ISODate("2016-11-01T11:46:03.000Z")
而不是:
"created_at" : "2016-11-01T11:46:03.000Z"
您编写的代码是正确的。
您需要将字符串转换为ISODates。
您可以在mongoshell中触发此查询:
db.user.find().forEach(function(doc){
doc.created_at = new Date(created_at)
db.user.save(doc);
})