mongoose MongoDB -如何返回对象数组中的匹配文档和匹配文档数

kt06eoxx  于 2023-02-23  发布在  Go
关注(0)|答案(1)|浏览(183)

我正在努力编写一个mongo聚合,它将返回匹配的文档以及每个标识符(在本例中为staffId)的匹配文档数。
我有下面的聚合,它可以返回计数,但似乎无法获得每个staffId的匹配文档。

xxx.aggregate([
       // step 1
      {
        $match: obj,
      },
      // step 2
      {
        $group: {
          _id: "$staffId",
          count: { $sum: 1 },
        },
      },
    ]);

其思想是返回一个包含staffId和count的对象数组,然后使用每个staffId返回匹配的文档,返回如下内容:

[{_id: '1234', count: 4, documents: [matching-documents for staff 1234]}, {_id: '5678', count: 12, documents: [matching-documents for staff 5768] } ]

任何帮助都是非常感谢的。谢谢!

lskq00tm

lskq00tm1#

您可以对$$ROOT执行$push操作,$$ROOT$group阶段引用文档本身。

db.collection.aggregate([
  {
    $group: {
      _id: "$staffId",
      count: {
        $sum: 1
      },
      documents: {
        $push: "$$ROOT"
      }
    }
  }
])

Mongo Playground

相关问题