我该如何反向填充mongo。我有2个架构的
用户:
var user_scheme = new mongoose.Schema({
name:String,
age:Number,
roles:{
type:mongoose.Schema.Types.ObjectId,
ref:'Role'
}
});
角色:
var role_scheme = new mongoose.Schema({
name:String,
});
文档:
///user
{
"_id" : ObjectId("5bf9a19b01ce3e19b440aed8"),
"name" : "user1",
"age" : 22,
"roles" : ObjectId("5c0242621ab7b677e6b2e01e"),
"__v" : 0
}
///role
{
"_id" : ObjectId("5c0242621ab7b677e6b2e01e"),
"name" : "Admin"
}
代码:
User.find().populate('roles').exec(function (err, data) {
res.json(data);
})
在这里我可以在用户下获得角色,但是如何在每个角色下获得用户。
答案 0 :(得分:3)
您可以使用以下$lookup
聚合
Role.aggregate([
{ "$match": { "name" : "Admin" }},
{ "$lookup": {
"from": "users",
"let": { "roleId": "$_id" },
"pipeline": [
{ "$match": { "$expr": { "$eq": ["$roles", "$$roleId"] } } }
],
"as": "users"
}}
])
答案 1 :(得分:1)
您可以使用mongoose-reverse-populate
模块。
答案 2 :(得分:1)
@Ashh的$lookup
函数对我不起作用。
我使用了较新的版本:
$lookup: {
from: 'users',
localField: '_id',
foreignField: 'organization',
as: 'users'
}