在 $limit 之前获取 $lookup 管道中返回的文档数 - MongoDB

艾比艾比

我有这个 $lookup 管道阶段:

{ 
  $lookup: {
        'from': 'comments',
        'localField': '_id',
        'foreignField': 'contentId',
        'as': 'comments',
        'pipeline': [{
          '$match': {
            'contentType': 'blog',
            'replyId': null
          }
        }, {
         '$skip': 2
        }, {
         '$limit': 1
        }]
      }
}

是否可以获得在 $lookup 管道的 $match 阶段之后返回并投影到我的主管道(即 $lookup 所属的管道)的文档数?

谢谢

尼姆罗德总统

一种选择是使用$facet

{ 
  $lookup: {
        'from': 'comments',
        'localField': '_id',
        'foreignField': 'contentId',
        'as': 'comments',
        'pipeline': [
          {$match: {'contentType': 'blog', 'replyId': null}},
          {$facet: {
            data:[{'$skip': 2}, {'$limit': 1}],
            total:[{$group:{_id: null, count: {$sum: 1}}}]
          }}]}
}

格式很清楚,但是您从$lookup管道返回的所有文档都被分组到一个文档下data

另一种选择是使用$setWindowFields

{ 
  $lookup: {
        'from': 'comments',
        'localField': '_id',
        'foreignField': 'contentId',
        'as': 'comments',
        'pipeline': [
          {$match: {'contentType': 'blog', 'replyId': null}},
          {$setWindowFields: {output: {totalCount: {$count: {}}}}}
         ]}
}

这将添加totalCount到所有返回的文档中,因此您需要对其进行格式化,但好处是您的$lookup管道结果是不同的文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章