#mongodb #aggregation-framework
Вопрос:
У меня есть такая коллекция:
[
{
"id": 1,
"gId": 1,
"field": "A"
},
{
"id": 2,
"gId": 1,
"field": "B"
},
{
"id": 3,
"gId": 2,
"field": "A"
},
{
"id": 4,
"gId": 1,
"field": "B"
},
{
"id": 5,
"gId": 3,
"field": "B"
},
{
"id": 6,
"gId": 2,
"field": "A"
},
]
На стороне пользователя они хотят выполнить запрос и отобразить страницу группы N с вложенным списком элементов в каждой группе.
По умолчанию они должны быть отсортированы по (gId,id).
У меня есть некоторые ограничения:
- Документ в коллекции большой
- В группе может быть много элементов
- Групповой этап $не поддерживает сортировку
Я использовал эту агрегацию для запроса:
db.collection.aggregate([
{
"$match": {
"field": "A"
}
},
{
"$group": {
"_id": "$gId",
"elements": {
"$addToSet": "$ROOT"
}
}
},
{
"$sort": {
"_id": 1,
}
},
{
"$skip": 1
},
{
"$limit": 1
},
{
"$unwind": "$elements"
},
{
"$replaceRoot": {
"newRoot": "$elements"
}
},
{
"$sort": {
"id": 1
}
}
])
Does exist a lighter query or pattern for this needs?
Thanks