Я должен агрегировать результат по месяцу данного документа. Считайте следующее моим документом:
{
"_id" : ObjectId("5b3314a12b05b1b247366f48"),
"email" : "[email protected]",
"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» ?? Таким образом, можно изменить приведенный выше запрос, чтобы он соответствовал типу "нет".
Также я пробовал с новым Date("").getMonth(), но он отображается как «NaN», я узнал, что его нельзя использовать внутри группы.
Пожалуйста, предложите свои идеи.
Возможный дубликат Группируйте по часам и считайте MongoDB





Вы можете использовать $ месяц в сочетании с $ dateFromString, чтобы получить то, что вам нужно:
db.collection.aggregate([
{
$match: {
"email": "[email protected]"
}
},
{
$unwind: "$qwerty"
},
{
$group: {
_id: {
$month: {
$dateFromString: {
dateString: "$qwerty.Date"
}
}
},
count: {
$sum: 1
}
}
}
])
Вы можете смотри здесь с двумя разными форматами даты.
Для группировки по дате вы можете сделать то же самое без $month:
db.collection.aggregate([
{
$match: {
"email": "[email protected]"
}
},
{
$unwind: "$qwerty"
},
{
$group: {
_id: {
$dateFromString: {
dateString: "$qwerty.Date"
}
},
count: {
$sum: 1
}
}
}
])
См. Эту версию здесь
Спасибо за его работу .. Но если я заменю $month на $date, ошибка выдачи $date не распознается
Почему ты бы так поступил? В вашем вопросе вы работали с месяцем нет?
Мне нужен month и date как отдельный запрос агрегации. В течение месяца он отлично работает с вашим постом, но на дату его нет ??