我正在研究mongodb集合的聚合。我的mongodb集合在时间戳中有creation_time。我怎样才能收集当天的结果并与第二天的结果汇总。假设我必须收集5天的数据。我的mongodb集合是:
{
"_id" : "1522845653126"
},
{
"_id" : "1522838153324"
},
{
"_id" : "1513421466415"
},
{
"_id" : "1515488183153"
},
{
"_id" : "1521571234500"
}
我怎样才能计算。具体日期会保存多少条目?并且假设我想要查询返回聚合的运行总计的结果,例如:
{
time: "2013-10-10"
count: 3,
},
{
time: "2013-10-11"
total: 7,
}
像这样的事情。
我试图做这样的事情
db.coll.aggregate([
{
$group:{
_id:new Date($creation_time).toLocaleDateString(),
$count:{$add:1}
}
time:new Date($creation_time).toLocaleDateString()
}
])
它不起作用。我在哪里做错了?我是mongodb的新手。 谢谢你的帮助
答案 0 :(得分:4)
在 mongodb 3.6
中,您可以使用$toDate
聚合将时间戳记转换为ISO日期,并使用$toLong
将字符串时间戳记转换为整数值。
db.collection.aggregate([
{ "$project": {
"_id": {
"$toDate": {
"$toLong": "$_id"
}
}
}},
{ "$group": {
"_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
"count": { "$sum": 1 }
}}
])
尝试here
以及以前的版本
db.collection.aggregate([
{ "$project": {
"date": { "$add": [ new Date(0), "$_id" ] }
}}
])
答案 1 :(得分:1)
就我而言, 我用过
db.collection.aggregate([
{ "$project": {
"date": { "$toDate": {
$multiply:["$_id",1000 ]
}
}
}}
])
将时间戳从毫秒转换为秒。