Monday, 14 September 2020

Pushing entry into multilevel nested array in MongoDB via mongoose

I am using mongoose in nodejs(express) in backend. My array structure has THREE levels. At third level, some files are present. But I need to add entries at any level as per user demand.

      {
        name:'A folder at Level1',
        route: 'level1_a',
      },
      {
        name:'Another folder at Level1',
        route: 'level1_b',
        children:
            [
                {
                name: 'A folder at Level2',
                route: 'level1_b/level2_a',
                children: 
                    [
                        {
                        name: 'A folder at Level3',
                        route: 'level1_b/level2_a/level3_a',
                        children:
                            [
                                {
                                name: 'A file at last level',
                                route: 'level1_b/level2_a/level3_a/file1'
                                },
                                {
                                name: 'Add a new File',
                                route:'level1_b/level2_a/level3_a/new_file'
                                },
                            ]
                        },
                        {
                        name: 'Add Folder at Level3',
                        route:'level1_b/level2_a/new_folder'
                        },
                    ]
                },
                {
                    name: 'Add Folder at level2',
                    route:'level1_b/new_folder'
                }
            ]
      },
      {
          name: 'Add Folder at Level1',
          route:'new_folder'
      }

Now I have to add an entry at a specified position. Suppose at level2, I need to add a folder. For adding, two parameters are sent from angular to the backend. These will be 'name' and a 'route'. So my entry would be having {name: 'Products', route: 'level1_a/products'} and similarily should be placed at correct position i.e. inside the children of level1_a. My backend has a schema which would be like:

const navSchema = mongoose.Schema({
name:{type:String,required:true},
route:{type:String},
children:{
    type: {
    name:{type:String,required:true},
    route:{type:String},
 }}
});
module.exports = mongoose.model('NatItems',navSchema);

And the API would be like:

router.post('/navlist',(req,res,next)=>{
  const name= req.body.folder;
  const route= req.body.url;
  console.log(folder,url);//it will be required parameters like name: 'Products', route:'level1_a/products'
  //let pathArray = route.split('/'); //if you want you can split the urls in the array

  //Help me write the code here

  res.status(201).json({
    message:"Post added successfully!"
  })
})

Please help me in adding entries in db. I know navlist.save() adds an entry directly but I am not able to add entries in a nested manner.

PS: I can't change the array structure because this array is easily read by angular and a complete navigation menu is made!! I am working for first time in nodejs and mongoose, so I am having difficulty in writing code with mongoose function.



from Pushing entry into multilevel nested array in MongoDB via mongoose

No comments:

Post a Comment