Reverse populate in mongoose

孤者浪人 提交于 2020-08-27 21:27:04

问题


How can i reverse populate in mongo. I have 2 schema's

User:

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

Role:

var role_scheme = new mongoose.Schema({
  name:String,
});

Documents:

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

Code:

User.find().populate('roles').exec(function (err, data) {
 res.json(data);
})

Here i can get roles under user, But how i get users under each role.


回答1:


You can use below $lookup aggregation

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



回答2:


The $lookup function by @Ashh was not working for me.

I used a more recent version :

$lookup: {
    from: 'users',
    localField: '_id',
    foreignField: 'organization',
    as: 'users'
}



回答3:


you can use mongoose-reverse-populate module.



来源:https://stackoverflow.com/questions/53570645/reverse-populate-in-mongoose

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!