我有两个模式的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()?
发布于 2019-03-01 01:00:28
不要紧。我想我必须一直使用aggregate().lookup()来完成这个任务。因为Role.users里没有任何in ..。
Role.aggregate()
.lookup({
from: 'users',
localField: '_id',
foreignField: 'role',
as: 'users'
}).then( role => {
res.send(role);
});这给了我想要的响应。
https://stackoverflow.com/questions/54929741
复制相似问题