每个文档的mongodb检索其字段+通过引用在另一个集合中的ID计数

问题描述

让我们说我有一个用户集合,其中单个文档具有这样的字段

{
    "_id" : "4775222e-8e4f-4f84-8dba-b097291bbd39","surname" : "Smith","forename" : "John"
}

并说我有工作集合,其中文档具有一些常规字段,但也有对用户ID的db ref

{
    "_id" : "f4bdda3e-0e8d-4e8d-b070-7d01421f5a51","description" : "do something","manager" : {
        "$ref" : "users","$id" : "4775222e-8e4f-4f84-8dba-b097291bbd39"
    }
}

既可以检索用户列表,又可以为每个用户在单个查询获取属于他的作业数,因此最终输出将是一个实体列表,其中单个实体看起来像

{
    "_id" : "4775222e-8e4f-4f84-8dba-b097291bbd39","forename" : "John","jobsCount":3
}

解决方法

您可以通过简单的$lookup阶段进行此操作:

db.users.aggregate([
  {
    "$lookup": {
      "from": "jobs","localField": "_id","foreignField": "manager.$id","as": "jobsCount"
    }
  },{
    "$addFields": {
      "jobsCount": {
        $size: "$jobsCount"
      }
    }
  }
])

Mongo Playground