在猫鼬中反向填充

Var*_*K.P 7 mongoose mongodb node.js mongodb-query aggregation-framework

我怎样才能在 mongo 中反向填充。我有 2 个架构

用户:

var user_scheme = new mongoose.Schema({
  name:String,
  age:Number,
  roles:{
    type:mongoose.Schema.Types.ObjectId,
    ref:'Role'
  }
 });
Run Code Online (Sandbox Code Playgroud)

角色:

var role_scheme = new mongoose.Schema({
  name:String,
});
Run Code Online (Sandbox Code Playgroud)

文件:

///user
{
"_id" : ObjectId("5bf9a19b01ce3e19b440aed8"),
"name" : "user1",
"age" : 22,
"roles" : ObjectId("5c0242621ab7b677e6b2e01e"),
"__v" : 0
}
 ///role
{
"_id" : ObjectId("5c0242621ab7b677e6b2e01e"),
"name" : "Admin"
}
Run Code Online (Sandbox Code Playgroud)

代码:

User.find().populate('roles').exec(function (err, data) {
 res.json(data);
})
Run Code Online (Sandbox Code Playgroud)

在这里我可以在用户下获得角色,但是我如何在每个角色下获得用户。

Ash*_*shh 7

您可以使用以下$lookup聚合

Role.aggregate([
  { "$match": { "name" : "Admin" }},
  { "$lookup": {
    "from": "users",
    "let": { "roleId": "$_id" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": ["$roles", "$$roleId"] } } }
    ],
    "as": "users"
  }}
])
Run Code Online (Sandbox Code Playgroud)


小智 5

$lookup@Ashh的功能对我不起作用。

我使用了更新的版本:

$lookup: {
    from: 'users',
    localField: '_id',
    foreignField: 'organization',
    as: 'users'
}
Run Code Online (Sandbox Code Playgroud)