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
было бы неплохо также вернуться.
Может кто-нибудь сказать, пожалуйста, что я делаю не так? Или скажите мне, если это вообще возможно сделать за один раз?