Javascript 如果输入集为空,则返回$facet字段
我有一个可重用的分页管道阶段,如下所示:Javascript 如果输入集为空,则返回$facet字段,javascript,mongodb,mongoose,aggregation-framework,Javascript,Mongodb,Mongoose,Aggregation Framework,我有一个可重用的分页管道阶段,如下所示: const pagination = query => ([ // query are the http request's query params { $facet: { rows: [ sortOrderStage(query), skipStage(query), limitStage(query), ], totalCount: [{ $cou
const pagination = query => ([ // query are the http request's query params
{
$facet: {
rows: [
sortOrderStage(query),
skipStage(query),
limitStage(query),
],
totalCount: [{ $count: 'count' }],
},
},
{ $unwind: '$totalCount' },
{ $addFields: { totalCount: '$totalCount.count' } },
])
当我需要分页时,我会将其附加到匹配和筛选等的现有管道中。
我的问题是,当输入集为空时,$facet部分只返回空数组。在这些情况下,我希望看到的是:
{
rows: [],
totalCount: 0,
}
目前,我通过一个额外步骤处理聚合结果:
const data = await Collection.aggregate([ ...pipelines, ...pagination(query)])
const { rows, totalCount } = data.length
? data[0]
: { rows: [], totalCount: 0 }
有没有办法修改分页阶段,这样我就不需要最后一步了?您的额外步骤没有问题。这是显而易见的,如果在聚合管道中找不到数据,它将返回一个空数组。您可以执行类似的操作,但就性能而言,这当然是无用的。谢谢,我将此分页用于多个路由,因此我需要多次添加额外的步骤。我的目标是保持干燥,而不是提高性能。我会考虑你链接到的“有点可笑”的建议:)