Mongoose .populate() 不填充
Posted
技术标签:
【中文标题】Mongoose .populate() 不填充【英文标题】:Mongoose .populate() does not populate 【发布时间】:2019-07-22 14:34:47 【问题描述】:我有两个架构 Role
和 User
。当我执行Role.find()
时,我想用具有该特定角色的用户填充users
。
let roleSchema = new Schema(
name:
type: String,
required: true,
,
...,
users: [
type: mongoose.Schema.ObjectId,
ref: 'User'
]
,
timestamps: true,
);
const Role = mongoose.model('Role', roleSchema);
let userSchema = new Schema(
username:
type: String,
required: true,
,
...,
role:
type: mongoose.Schema.ObjectId,
ref: 'Role'
,
,
timestamps: true,
);
const User = mongoose.model('User', userSchema);
当我使用以下代码获得Role
时:
Role.findById(req.params.roleId)
.populate('users')
.then(role =>
res.send(role);
).catch(err =>
res.send(err)
);
它返回以下内容:
"users": [
],
"_id":"5c78006df35ca926534ad865",
"name":"Role",
"createdAt":"2019-02-28T15:38:21.741Z",
"updatedAt":"2019-02-28T15:38:21.741Z",
"__v":0
User.find().populate('role')
工作正常,但 Role.find().populate('users')
不行。
我做错了什么还是在这种情况下不需要.populate()
?
【问题讨论】:
【参考方案1】:没关系。我想我必须一直使用aggregate().lookup()
...因为Role.users
中没有任何ID...
Role.aggregate()
.lookup(
from: 'users',
localField: '_id',
foreignField: 'role',
as: 'users'
).then( role =>
res.send(role);
);
这给了我想要的回应。
【讨论】:
以上是关于Mongoose .populate() 不填充的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB和Mongoose:无法使用.populate()填充用户的帖子