node.js - Mongoose .populate() 不填充
问题描述
我有两个架构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()
?
解决方案
没关系。我想我必须一直使用它...因为...aggregate().lookup()
中没有任何IDRole.users
Role.aggregate()
.lookup({
from: 'users',
localField: '_id',
foreignField: 'role',
as: 'users'
}).then( role => {
res.send(role);
});
这给了我想要的回应。
推荐阅读
- laravel - 无法使用 vue-router 和 Laravel 直接访问嵌套路由
- c++ - 编译器可以通过指向易失性的指针优化存储吗?
- java - 无法从 Mediastore.Audio 获取设备文件上的所有音频
- android - 有什么方法可以让某些用户无需身份验证即可访问特定节点?
- powershell - 将数组中的所有数字四舍五入
- javascript - React Router 在 POST 请求中添加 URL 查询参数
- textures - Release memory aquired by CreateTexture2D()?
- python - 将数据框值与值列表进行比较,并获取数据框中不存在的值列表
- javascript - 如何在javascript或lodash中从数组中删除所有下一个元素
- java - Java - “未使用局部变量”