【发布时间】:2020-12-20 01:33:42
【问题描述】:
我有一个很好的 mongoose 聚合函数,它使用以下结构运行分页 (mongoose-aggregate-paginate-v2):
export const export = (req, res) => {
const optionsPaginate = {
offset: parseInt(req.query.skip),
limit: parseInt(req.query.top),
};
const aggregate = model.aggregate([
{$match: {some arguments in here}},
{$fetch:{
item1: {some stuff},
item2: {some stuff},
item3: {some stuff}
]);
model.aggregatePaginate(aggregate, optionsPaginate, (err, results) => {
res.json(results);
})
};
作为回报,我得到一个物品清单:
{
items: [
{
item1: [...],
item2: [...],
item3: [...],
}
]
}
因为这是一个只有一个元素的数组(包含一堆数组),所以没有选项可以跳过:我只能取唯一/第一个元素或什么都不带。如何将聚合的输出从数组更改为对象,以便分页函数可以迭代一堆 fetch-objects?此更改需要在应用分页之前发生,否则 mongoose-aggregate-paginate 不起作用。 所以分页会起作用,如果会有类似的输出
{
items: [
{
item1: [...]
},
{
item2: [...]
},
{
item3: [...]
}
}
]
}
我尝试在管道末尾应用一些 $replaceRoot 和 $arrayToObject,但出现 mongoDB 错误。
【问题讨论】:
标签: node.js mongodb mongoose fetch aggregate