首页 > 解决方案 > 每个文档的mongodb通过引用检索其字段+在另一个集合中的id计数

问题描述

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

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

假设我有作业集合,其中一个文档有一些常规字段,但也有 db ref 到用户 ID,就像这样

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

是否可以检索用户列表,但也可以在单个查询中为每个用户检索属于他的工作计数,因此最终输出将是单个实体看起来像的实体列表

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

标签: mongodbcountdbref

解决方案


你可以通过一个简单的$lookup阶段来做到这一点:

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

蒙戈游乐场


推荐阅读