У меня есть три документа:Сортировка подмассивов в агрегате Результат
{
"id_user": "t57092501745ad6285ac58c22",
"name": "Day #1",
"date": {
"$date": "2016-04-21T20:50:00.190Z"
},
"text": "My text"
}
{
"id_user": "t57092501745ad6285ac58c22",
"name": "Day #2",
"date": {
"$date": "2016-04-22T20:50:00.190Z"
},
"text": "My text"
}
{
"id_user": "t57092501745ad6285ac58c22",
"name": "Day #3",
"date": {
"$date": "2016-04-22T20:51:00.190Z"
},
"text": "My text"
}
и мне нужно сгруппировать эти за день, так что я:
{
"$match": {
"id_user": "t57092501745ad6285ac58c22"
}
}, {
"$sort": {
"date": -1
}
}, {
"$group": {
"_id": {
$dayOfYear: "$date"
},
"data": {
"$push": {
"id_user": "$id_user",
"name": "$name",
"date": "$date",
"text": "$text"
},
},
}
}
и результат:
{
{
_id: 113,
data: [{
"id_user": "t57092501745ad6285ac58c22",
name: "Day #1",
date: "2016-04-22T20:51:00.190Z",
text: "My text"
}]
}, {
_id: 114,
data: [{
"id_user": "t57092501745ad6285ac58c22",
name: "Day #3",
date: "2016-04-23T20:51:00.190Z",
text: "My text"
}, {
"id_user": "t57092501745ad6285ac58c22",
name: "Day #2",
date: "2016-04-23T20:50:00.190Z",
text: "My text"
}]
}
}
и это нормально, но порядок не то, что мне нужно:
{ Day #1 }, { Day #3, Day #2 }
если изменить sort
к { "date": 1 }
я могу инвертировать порядок 2 группы, таким образом:
{ Day #3, Day #2 }, { Day #1 }
, но я не знаю, как Тхо изменения также порядок внутри подрешетки, чтобы получите правильное значение:
{ Day #1 }, { Day #2, Day #3 }
Каков правильный путь?
Вы отсортирован в «нисходящей» порядке. Сортировка «по возрастанию» вместо: '{" $ sort ": {" date ": 1}}' –
Нет, поскольку я говорю, что это не работает, прочитайте мой вопрос. –
Да, пожалуйста, подумайте немного. Вы '$ sort' перед добавлением в массив, поэтому' $ push' будет уважать порядок обнаружения из '$ sort', а« элементы массива »будут отсортированы таким образом (с корректировкой порядка' $ sort' . '' Group' делает ** не **. Поэтому, если вы хотите, чтобы «документы» были исправны, вам нужно ** другое ** '$ sort' в качестве последнего этапа конвейера (также восходящего).' { «$ sort»: {«_id»: 1}} '. Посмотрите внимательно, день № 3 - это« более поздняя »дата, чем день № 2. Таким образом, у вас неправильный порядок, и не заметил, что' $ group' не исправьте в порядке. –