在说正事之前,我要推荐一个福利:(你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>),好了下面开始说正事:
问题描述:
两个表角色表 和 菜单表 ,不同角色返回不同得菜单 ,因为初学mongoose有好多都不会 想请教下
roleSchema.js
const mongoose = require('mongoose');
const RoleSchema = new mongoose.Schema({
name:{
type:String,
unique:true,
required:true
},
menu:[{
type: mongoose.Types.ObjectId,
ref : 'menu'
}]
})
module.exports = mongoose.model('roles',RoleSchema);
menuSchema.js
const mongoose = require('mongoose');
const Menu = new mongoose.Schema({
path: {
type: String,
required: true
},
pid: {
display: '父节点',
default: 0,
type: mongoose.Schema.Types.Mixed
},
name: {
unique: true,
type: String,
required: true
},
})
module.exports = mongoose.model('menu',Menu);
添加角色
const RoleAdd = async(ctx)=>{
//let req = ctx.request.body;
let req = {name:'管理员',menu:[]}
let newRole = new RolesSchema(req);
let result = await newRole.save()
ctx.body = {
code:200,
data:result
}
}
添加菜单
const AddMenu = async(ctx)=>{
//let data =ctx.request.body;
let data = {path:'/home',name:'首页'}
if(!data.pid)data.pid = 0;
let role = new MenuSchema(data)
let result = await role.save()
ctx.body={
code:200,
msg:'添加成功',
data:result
}
}
角色绑定菜单
const RoleAddMenu = async(ctx)=>{
//let req = ctx.request.body;
let req = {role_id:'5dcd016be542053d90537540',menu_id:'5dcd015ce542053d9053753f'};
let role = await RolesSchema.findByIdAndUpdate(req.role_id,
{ $push: { 'menu':mongoose.Types.ObjectId(req.menu_id)}},{upsert:false}
);
ctx.body = {
code:200,
data:role
}
}
获取关联
const GetMyMenu = async(ctx)=>{
let req = ctx.query.role_id;
console.log(req)
let result =await RolesSchema.findOne({_id:req})
.populate({
path: 'menu',
model: {path: 'menu'}
}).exec(function (err, data) {
console.log(data);
})
console.log(result)
ctx.body = {
code:200,
msg:result
}
}
结果查不出关联得内容 .exec回调中获取得data 为undifind
下面贴出表结构
role表
menu表
可见menu表中列表2得_id 与 role表中超级管理员的menu数组中的的第一个_id 一致
但是为什么就是无法查出联表的数据 是我哪里代码有问题嘛?
求解答
populate({
path: 'menu',
model: {path: 'menu'}
})
这个model
我看了下文档,没有看到类似的写法。
你换成这样试试:
populate({
path: 'menu',
})
郑重声明:本站部分内容转载自网络,版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们(QQ/微信153890879)修改或删除,多谢。