【发布时间】:2013-11-25 20:13:58
【问题描述】:
我正在尝试按名为“foo”{ _id, TimeStamp } 的集合的时间戳进行分组
db.foos.aggregate(
[
{$group : { _id : new Date (Date.UTC({ $year : '$TimeStamp' },{ $month : '$TimeStamp' },{$dayOfMonth : '$TimeStamp'})) }}
])
期望有很多日期,但结果只有一个日期。我使用的数据是正确的(有许多 foo 和不同的日期,除了 1970 年)。日期解析有问题,但我还不能解决。
{
"result" : [
{
"_id" : ISODate("1970-01-01T00:00:00.000Z")
}
],
"ok" : 1
}
试过这个:
db.foos.aggregate(
[
{$group : { _id : { year : { $year : '$TimeStamp' }, month : { $month : '$TimeStamp' }, day : {$dayOfMonth : '$TimeStamp'} }, count : { $sum : 1 } }},
{$project : { parsedDate : new Date('$_id.year', '$_id.month', '$_id.day') , count : 1, _id : 0} }
])
结果:
uncaught exception: aggregate failed: {
"errmsg" : "exception: disallowed field type Date in object expression (at 'parsedDate')",
"code" : 15992,
"ok" : 0
}
还有那个:
db.foos.aggregate(
[
{$group : { _id : { year : { $year : '$TimeStamp' }, month : { $month : '$TimeStamp' }, day : {$dayOfMonth : '$TimeStamp'} }, count : { $sum : 1 } }},
{$project : { parsedDate : Date.UTC('$_id.year', '$_id.month', '$_id.day') , count : 1, _id : 0} }
])
在结果中看不到日期
{
"result" : [
{
"count" : 412
},
{
"count" : 1702
},
{
"count" : 422
}
],
"ok" : 1
}
【问题讨论】:
-
您不能在聚合中使用 Javascript - 即您的新 Date 不会根据您尝试传递给它的值进行评估。
-
如果您想将时间转换为日期(每天或每小时),请在此处查看一些示例:kamsky.org/1/post/2013/03/…
-
Date.UTC 是问题所在。我认为 mongo 中不存在这样的构造。
-
@AsyaKamsky 我喜欢你的博客 :-)。你能把它的链接放在你的个人资料里吗?
-
从 3.0 开始,有一个 dateToString 格式让生活更轻松docs.mongodb.com/manual/reference/operator/aggregation/…
标签: mongodb aggregation-framework