在猫鼬中反向填充
Posted
技术标签:
【中文标题】在猫鼬中反向填充【英文标题】:Reverse populate in mongoose 【发布时间】:2019-05-03 09:11:37 【问题描述】:如何在 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);
)
这里我可以获取用户下的角色,但是我如何获取每个角色下的用户。
【问题讨论】:
请张贴样本合集 问题已更新... 也发布来自roles
集合的文档。你想用哪个role
找到用户?
现在我如何在管理员角色中获取 user1,例如 - Role.find().populate('users') 类似的东西..
你试过答案了吗?
【参考方案1】:
@Ashh 的 $lookup
函数对我不起作用。
我使用了更新的版本:
$lookup:
from: 'users',
localField: '_id',
foreignField: 'organization',
as: 'users'
【讨论】:
最好和最简单的答案,无需任何外部模块?。应该是批准的答案 @Ashh 的答案对您不起作用,因为它适用于数组。用户有 roles 字段!【参考方案2】:你可以在下面使用$lookup
聚合
Role.aggregate([
"$match": "name" : "Admin" ,
"$lookup":
"from": "users",
"let": "roleId": "$_id" ,
"pipeline": [
"$match": "$expr": "$eq": ["$roles", "$$roleId"]
],
"as": "users"
])
【讨论】:
【参考方案3】:您可以使用mongoose-reverse-populate
模块。
【讨论】:
以上是关于在猫鼬中反向填充的主要内容,如果未能解决你的问题,请参考以下文章