简体   繁体   English

使用 nodejs 和 mongoose 从具有动态嵌套级别的 mongodb 获取数据

[英]Get data from mongodb with dynamic nested levels using nodejs and mongoose

For example I have one table:例如我有一张桌子:

Menuid, menuname, parentid, levelid -- this is table Menuid, menuname, parentid, levelid -- 这是表

Consider the values:考虑以下值:

Menuid:Pg, menuname:mainprogram, programid:'', levelid: 1
Menuid:sb, menuname:subprogram, programid:'Pg', levelid: 2
Menuid:cb, menuname:childprogram, programid:'sb', levelid: 3
Menuid:Pg2, menuname:mainprogram2, programid:'', levelid: 1

Output:输出:

[ {
  Menuid:'Pg',
  Menuname:'mainprogram',
  Children:[ {
    Menuid:'sb',
    Menuname:'subprogram',
    Children:[ {
      Menuid:'cb',
      Menuname:'childprogram'
    } ]
  } ]
}, {
  Menuid:'Pg2',
  Menuname:'mainprogram2'
} ]

getting menu code获取菜单代码

exports.getMenus = (req, res, next) => {
// need clarification
}

model for menu菜单模型

const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');
const menuSchema = mongoose.Schema({
    menuId: {
        type: String,
        required: true,
        unique: true
    },
    menuName: {
        type: String,
        required: true
    },
    icon: {
        type: String,
        required: false
    },
    type: {
        type: String,
        required: false
    },
    url: {
        type: String,
        required: false
    },
    levelId: {
        type: Number,
        required: true
    },
    programId: {
        type: String,
        required: false
    },
    order: {
        type: Number,
        required: true
    },
    createdBy: {
        type: String,
        require: false
    },
    createdDate: {
        type: Date,
        require: false,
    },
    updatedBy: {
        type: String,
        default: '',
        require: false
    },
    updatedDate: {
        type: Date,
        default: '',
        require: false,
    },
});
menuSchema.plugin(uniqueValidator);
module.exports = mongoose.model('Menu', menuSchema);

router:路由器:

router.get('/getmenus/:id', MenuController.getMenus);

user request from client like http://localhost:3000/api/menu/getmenus/pg getmenus after slash word is a required menus under submenus来自客户端的用户请求,如http://localhost:3000/api/menu/getmenus/pg getmenus 斜杠后的 getmenus 是子菜单下的必需菜单

Note: if each data has order menans based on menu object need to render with that order.注意:如果每个数据都有基于菜单对象的顺序,则需要按照该顺序进行渲染。 Please provide any solution.请提供任何解决方案。

请参阅以下链接,您的预期行为将在此 graphlookup https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup/ 中可用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM