Click here to Skip to main content
12,505,591 members (54,196 online)
Click here to Skip to main content
Articles » Database » NoSQL » General » Downloads

Stats

15.6K views
227 downloads
7 bookmarked
Posted

Storing Tree like Hierarchy Structures With MongoDB, Part 2

, 6 Jan 2013 CC (ASA 3U)
Article demonstrates three approaches for storing tree like structures with NoSQL databases on example of the MongoDB
use TreeMongo;

//assume, we want to move  LG(24,25) with parent Electronics(1,46) to new location with a parent
// Cell_Phones_and_Smartphones as a last child

//Step 1 - remove LG node from tree
// see noderemoval example

//Step2 take right value of the new parent
var newparent = db.categoriesNSO.findOne({_id:"Cell_Phones_and_Smartphones"});
//new node will have left value of the parent's right value and right value - incremented by one parent's right one
var nodetomove = {_id:'LG', left:newparent.right,right:newparent.right+1, parent:newparent._id}


//now we have to create the place for the new node
//update affects right values of all nodes on a further traversal path
//3th and 4th parameters: false stands for upsert=false and true stands for multi=true
db.categoriesNSO.update({right:{$gte:newparent.right}},{$inc:{right:2}}, false, true)

//and affects all nodes that remain for traversal
db.categoriesNSO.update({left:{$gte:newparent.right}},{$inc:{left:2}}, false, true)

// ready to insert
db.categoriesNSO.insert(nodetomove)
nodetomove

exit

/*
  After Step1 removal LG: node:

 +-Electronics (1,44)
    +--Cameras_and_Photography (2,13)
          +-----Digital_Cameras (3,4)
          +-----Camcorders (5,6)
          +-----Lenses_and_Filters (7,8)
          +-----Tripods_and_supports (9,10)
          +-----Lighting_and_studio (11,12)
      +---Shop_Top_Products (14,23)
          +-----IPad (15,16)
          +-----IPhone (17,18)
          +-----IPod (19,20)
          +-----Blackberry (21,22)
      +---Cell_Phones_and_Accessories (24,43)
          +-----Cell_Phones_and_Smartphones (25,36)
                +--------Nokia (26,27)
                +--------Samsung (28,29)
                +--------Apple (30,31)
                +--------HTC (32,33)
                +--------Vyacheslav (34,35)
            +------Headsets (37,38)
            +------Batteries (39,40)
            +------Cables_And_Adapters (41,42)

After step 2

 +-Electronics (1,46)
   +--Cameras_and_Photography (2,13)
         +-----Digital_Cameras (3,4)
         +-----Camcorders (5,6)
         +-----Lenses_and_Filters (7,8)
         +-----Tripods_and_supports (9,10)
         +-----Lighting_and_studio (11,12)
     +---Shop_Top_Products (14,23)
         +-----IPad (15,16)
         +-----IPhone (17,18)
         +-----IPod (19,20)
         +-----Blackberry (21,22)
     +---Cell_Phones_and_Accessories (24,45)
         +-----Cell_Phones_and_Smartphones (25,38)
                 +---------Nokia (26,27)
                 +---------Samsung (28,29)
                 +---------Apple (30,31)
                 +---------HTC (32,33)
                 +---------Vyacheslav (34,35)
                 +---------LG (36,37)
             +-------Headsets (39,40)
             +-------Batteries (41,42)
             +-------Cables_And_Adapters (43,44)

 */

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Creative Commons Attribution-Share Alike 3.0 Unported License

Share

About the Author

Vyacheslav Voronenko
Web Developer
Ukraine Ukraine
Web Developer, interested in bleeding age web technologies and projects.

Experienced and interested in:
- High load web projects, bespoke software development
- DevOps: Chef, Ansible, Vagrant
- NoSQL (mongodb)
- Client stack (javascript core, jquery, AngularJS, HTML5 apis)
- *AAS (Amazon beanstalk, Redhat openshift)
- MEAN & Pure JS stack (Javascript, AngularJS, Node.JS, MongoDB)


-> DevOps inquiries
-> Other inquiries
-> Follow me on Github

You may also be interested in...

Pro
Pro
| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160927.1 | Last Updated 6 Jan 2013
Article Copyright 2013 by Vyacheslav Voronenko
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid