gpt4 book ai didi

mongodb - 具有分页数据和总计的 Mongo 聚合

转载 作者:可可西里 更新时间:2023-11-01 09:56:23 25 4
gpt4 key购买 nike

我已经遍历整个堆栈溢出,但没有找到任何关于如何返回结果集中包含的正确分页数据的信息。

我正在尝试从我的 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});

我正在尝试将分页组设置为根,其中包含实际的分组数据(以便我获得实际的总数,同时仍保留 skiplimits) .

以上代码会在mongo控制台返回如下错误:字段 'page' 必须是一个累加器对象

如果我从分页组中删除 pagepageSize,我仍然会收到以下错误:

BSONObj size: 45707184 (0x2B96FB0) is invalid. Size must be between 0 and 16793600(16MB) First element: id: 0

如果我一起删除分页组,查询就可以正常工作。但是我确实需要返回我存储了多少文档 total,虽然实际上不是必需的,但是 pagepageSize 会很好地返回为好吧。

有人可以告诉我我做错了什么吗?或者告诉我是否可以一次完成此操作?

最佳答案

如果你有很多事件,{$ push: "$$ ROOT"},会让Mongo返回一个错误,我已经用$facet解决了。 (仅适用于 3.4+ 版本)

aggregate([
{ $match: options },
{
$facet: {
edges: [
{ $sort: sort },
{ $skip: skip },
{ $limit: limit },
],
pageInfo: [
{ $group: { _id: null, count: { $sum: 1 } } },
],
},
},
])

关于mongodb - 具有分页数据和总计的 Mongo 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42111369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com