Mongodb Разбивает на страницы и сортирует по идентификатору группы

#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?

Mongo Playground

Thanks