我必须根据给定文档的月份汇总结果。考虑以下内容作为我的文档:
{
"_id" : ObjectId("5b3314a12b05b1b247366f48"),
"email" : "abc@gmail.com",
"qwerty":[{
"id" : "5ba4ebbad1b5eaf038841302",
"status" : "inprogress",
"Date" : "2018-08-20"
},
{
"id" : "5ba4ebbad1b5eaf038841303",
"status" : "inprogress",
"Date" : "2018-08-20"
}]
以下是我的查询:
var query =[
{ $match: {"email":email} },
{$unwind: "$courses" },
{$group:{_id:{$substrCP: ["$qwerty.Date", 5, 2]},count:{$sum:1}}}
];
它正常工作。但是我$substrCP: ["$qwerty.Date", 5, 2]
的日期格式是“ 2018-08-20”,如果“ 20-08-2018”呢?因此可以将上面的查询更改为适应nay类型。
我也尝试使用新的Date("").getMonth()
,但显示为“ NaN”,我知道无法在组内部使用。
请提出您的想法。
答案 0 :(得分:0)
您可以结合使用$month和$dateFromString来获得所需的内容:
db.collection.aggregate([
{
$match: {
"email": "abc@gmail.com"
}
},
{
$unwind: "$qwerty"
},
{
$group: {
_id: {
$month: {
$dateFromString: {
dateString: "$qwerty.Date"
}
}
},
count: {
$sum: 1
}
}
}
])
您可以see it here使用两种不同的日期格式。
要按日期分组,您可以在没有$month
的情况下执行相同的操作:
db.collection.aggregate([
{
$match: {
"email": "abc@gmail.com"
}
},
{
$unwind: "$qwerty"
},
{
$group: {
_id: {
$dateFromString: {
dateString: "$qwerty.Date"
}
},
count: {
$sum: 1
}
}
}
])
查看此版本here