Я просканировал все переполнения стека и не нашел никакой информации о том, как вернуть правильные данные разбивки на страницы, включенные в набор результатов.Mongo aggregation с разбитыми на страницы данными и итоговыми значениями
Я пытаюсь объединить некоторые данные из моего магазина mongo. То, что я хочу, чтобы иметь что-то возвращение:
{
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
).
Приведенный выше код возвращает следующую ошибку в Монго консоли: The field 'page' must be an accumulator object
Если я удалить page
и pageSize
из группы постраничной, я все еще получаю следующее сообщение об ошибке: BSONObj size: 45707184 (0x2B96FB0) is invalid. Size must be between 0 and 16793600(16MB) First element: id: 0
Если я удалить группа разбиения на страницы alltogether, запрос работает нормально. Но мне действительно нужно вернуть количество документов, которые я сохранил total
, и, хотя на самом деле не нужно, page
и pageSize
было бы неплохо вернуться.
Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно? Или скажите мне, возможно ли это сделать за один раз?
Что вы имеете в виду * ему не будет работать*? Ошибка? Неожиданные результаты? Какая часть запроса выходит из строя? –
Добавлено сообщение об ошибке как edit above –