docs.mongodb.com/manual/reference/operator/aggregation/limit

смотрел переполнение стека и не нашел никакой информации о том, как вернуть правильные данные пагинации, включенные в набор результатов.

Я пытаюсь собрать некоторые данные из моего магазина Монго. Что я хочу, так это что-то вернуть

{
  total: 5320,
  page: 0,
  pageSize: 10,
  data: [
    {
      _id: 234,
      currentEvent: "UPSTREAM_QUEUE",
      events: [
        { ... }, { ... }, { ... }
      ]
    },
    {
      _id: 235,
      currentEvent: "UPSTREAM_QUEUE",
      events: [
        { ... }, { ... }, { ... }
      ]
    }
  ]
}

Это то, что я до сих пор:

// page and pageSize are variables
db.mongoAuditEvent.aggregate([
  // Actual grouped data
  {"$group": {
    "_id" : "$corrId", 
    "currentEvent": {"$last": "$event.status"}, 
    "events": { $push: "$ROOT"}
  }},
  // Pagination group
  {"$group": {
    "_id": 0,
    "total": { "$sum": "corrId" },
    "page": page,
    "pageSize": pageSize,
    "data": {
      "$push": {
        "_id": "$_id",
        "currentEvent": "$currentEvent",
        "events": "$events"
      }
    }
  }},
  {"$sort": {"events.timestamp": -1} }, // Latest first
  {"$skip": page },
  {"$limit": pageSize }
], {allowDiskUse: true});

Я пытаюсь сделать группу разбиения на страницы в качестве корня, содержащую фактические сгруппированные данные внутри (так что я получаю фактические итоги, в то же время сохраняяskip а такжеlimits).

Приведенный выше код вернет следующую ошибку в консоли mongo:The field 'page' must be an accumulator object

Если я удалюpage а такжеpageSize из группы нумерации страниц я все еще получаю следующую ошибку:

Размер BSONObj: 45707184 (0x2B96FB0) недействителен. Размер должен быть от 0 до 16793600 (16 МБ). Первый элемент: id: 0

Если я удаляю группу нумерации страниц целиком, запрос работает нормально. Но мне действительно нужно вернуть сколько документов я сохранилtotalи, хотя на самом деле не обязательно,page а такжеpageSize было бы неплохо также вернуться.

Может кто-нибудь сказать, пожалуйста, что я делаю не так? Или скажите мне, если это вообще возможно сделать за один раз?

Ответы на вопрос(2)

Ваш ответ на вопрос