Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果输入集为空,则返回$facet字段_Javascript_Mongodb_Mongoose_Aggregation Framework - Fatal编程技术网

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 }

有没有办法修改分页阶段,这样我就不需要最后一步了?

您的额外步骤没有问题。这是显而易见的,如果在聚合管道中找不到数据,它将返回一个空数组。您可以执行类似的操作,但就性能而言,这当然是无用的。谢谢,我将此分页用于多个路由,因此我需要多次添加额外的步骤。我的目标是保持干燥,而不是提高性能。我会考虑你链接到的“有点可笑”的建议:)