我有一个包含以下文档的集合:
{
_id: ObjectId("516eb5d2ef4501a804000000"),
accountCreated: "2013-04-17 16:46",
accountLevel: 0,
responderCount: 0
}
我想根据accountCreated日期(每天的计数)对这些文档进行分组和计数,但由于日期也包括时间,因此我一直处理日期。 这就是我所拥有的,但它会返回包含时间的计数,这意味着很多条目总是以1作为帐户。
$g = $form->mCollectionUsers->aggregate(array(
array( '$group' => array( '_id' => '$accountCreated', 'accounts' => array( '$sum' => 1 ) ) )
));
有没有办法将日期重写为仅占用帐户中的一天并跳过时间?
我找到了this example,但我无法弄清楚如何使其适应这个例子。
答案 0 :(得分:3)
如果accountCreated是一个日期,你可以这样做(我将使用mongo shell语法,因为我不熟悉php驱动程序):
db.mCollectionUsers.aggregate([
{$project :{
day : {"$dayOfMonth" : "$accountCreated"},
month : {"$month" : "$accountCreated"},
year : {"$year" : "$accountCreated"}
}},
{$group: {
_id : {year : "$year", month : "$month", day : "$day"},
accounts : { "$sum" : 1}
}}
]);
答案 1 :(得分:0)
如果要正确显示日期:
db.mCollectionUsers.aggregate([
{
$group: {
_id: { $dateToString: { format: '%Y-%m-%d', date: '$accountCreated' } },
count: { $sum: 1 }
}
},
{
$project: {
_id: 0,
date: '$_id',
count: 1
}
}
])
结果如下:
[
{
"date": "2020-11-11",
"count": 8
},
{
"date": "2020-11-13",
"count": 3
},
{
"date": "2020-11-16",
"count": 3
},
]