我的MongoDB查询如下。根据{{1}}对数据进行排序无法正常工作。请帮助我解决问题。在MongoDB中激发查询后,我已附加了实际输出和预期输出。而且我也想从最近7天开始逐日计数。
//我的查询如下。请调查一下。
createdat
输出:-
User.aggregate([{
$match: {
createdAt: {
$gte: new Date("2016-01-01")
}
}
}, {
$group: {
_id: {
"year": { "$year": "$createdAt" },
"month": { "$month": "$createdAt" },
"day": { "$dayOfMonth": "$createdAt" }
},
count:{$sum: 1}
}
},{"$sort": {"createdAt": 1}}]).exec(function(err,data){
if (err) {
console.log('Error Fetching model');
res.status(500).send();
} else {
res.send(data);
}
});
预期输出:-
[
{
"_id": {
"year": 2020,
"month": 5,
"day": 12
},
"count": 2
},
{
"_id": {
"year": 2020,
"month": 5,
"day": 7
},
"count": 2
},
{
"_id": {
"year": 2020,
"month": 5,
"day": 13
},
"count": 3
}
]
答案 0 :(得分:0)
如评论中所述,您在createdAt
阶段吞下了$group
。
因此,最简单的方法是将$dateToString
与createdAt
一起使用。然后可以使用$sort
。
User.aggregate([
{
"$match": {
"createdAt": {
"$gte": new Date("2016-01-01")
}
}
},
{
"$group": {
"_id": {
"$dateToString": { "date": "$createdAt", "format": "%d-%m-%Y" }
},
"count": { "$sum": 1 }
}
},
{ "$sort": { "_id": 1 } }
]).exec(function (err, data) {
if (err) {
console.log("Error Fetching model");
res.status(500).send();
} else {
res.send(data);
}
})