在MongoDB聚合管道中,如何用数组字段替换root?

时间:2020-10-24 16:49:33

标签: mongodb aggregation-framework

假设我有一个users集合,其中一个roleIds字段包含Role个引用数组。

db.users.aggregate([
  {$match:{ _id: ObjectId('5f9453b4484d206714c02a2f') }}, 
  {$project:{ roleIds: 1, _id: 0 }}, 
  {$unwind: "$roleIds"}, 
  {$lookup:{ from: "roles", localField: "roleIds", foreignField: "_id", as: "roles"}}, // <= STEP 4
  {$replaceRoot: "$roles"}
])

在STEP 4之后,我会看到以下内容:

{ 
  "roles" : [ 
    { "_id" : ObjectId("xxxx"), "name" : "role1" },
    { "_id" : ObjectId("xxxx"), "name" : "role2" },
  ]
}

如何将其转换为此:

[ 
  { "_id" : ObjectId("xxxx"), "name" : "role1" },
  { "_id" : ObjectId("xxxx"), "name" : "role2" },
]

replaceRoot阶段似乎只有在角色字段是文档而不是数组的情况下才起作用,在这种情况下会引发错误。

1 个答案:

答案 0 :(得分:0)

这有效:

vhandles