问题
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