Http://docs.mongodb.org/manual/tutorial/model-tree-structures/MongoDB Five kinds of tree-shaped structure notation
First type: Parent link structure
db.categories.insert( { _id: "MongoDB", parent: "Databases" } )db.categories.insert( { _id: "dbm", parent: "Databases" } )db.categories.insert( { _id: "Databases", parent: "Programming" } )db.categories.insert( { _id: "Languages", parent: "Programming" } )db.categories.insert( { _id: "Programming", parent: "Books" } )db.categories.insert( { _id: "Books", parent: null } )
Characteristics:
Quick Get parent node:
Db.categories.findOne ({_id: "MongoDB"}). Parent
Easy to create parent node index
Db.categories.ensureIndex ({parent:1})
Get son node by querying parent node
Db.categories.find ({parent: "Databases"})
4. Multiple queries are required to retrieve subtrees.
Second Type: sub-link structure
db.categories.insert( { _id: "MongoDB", children: [] } )db.categories.insert( { _id: "dbm", children: [] } )db.categories.insert( { _id: "Databases", children: [ "MongoDB", "dbm" ] } )db.categories.insert( { _id: "Languages", children: [] } )db.categories.insert( { _id: "Programming", children: [ "Databases", "Languages" ] } )db.categories.insert( { _id: "Books", children: [ "Programming" ] } )
Characteristics:
Quick Get son node
Db.categories.findOne ({_id: "Databases"}). Children
Easy to create child node index
Db.categories.ensureIndex ({children:1})
Get parent node by querying son node
Db.categories.find ({children: "MongoDB"})
Suitable for storing storage graphs, one node may have multiple parents.
The third type: ancestor queue structure
db.categories.insert( { _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )db.categories.insert( { _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )db.categories.insert( { _id: "Databases", ancestors: [ "Books", "Programming" ], parent: "Programming" } )db.categories.insert( { _id: "Languages", ancestors: [ "Books", "Programming" ], parent: "Programming" } )db.categories.insert( { _id: "Programming", ancestors: [ "Books" ], parent: "Books" } )db.categories.insert( { _id: "Books", ancestors: [ ], parent: null } )
Characteristics:
Get Ancestors Fast
Db.categories.findOne ({_id: "MongoDB"}). Ancestors
Easy to create ancestor node index
Db.categories.ensureIndex ({ancestors:1})
retrieving descendants by querying ancestors
Db.categories.find ({ancestors: "Programming"})
Ancestor mode is slightly slower than materialized path mode
Fourth type: materialized path structure
db.categories.insert( { _id: "Books", path: null } )db.categories.insert( { _id: "Programming", path: ",Books," } )db.categories.insert( { _id: "Databases", path: ",Books,Programming," } )db.categories.insert( { _id: "Languages", path: ",Books,Programming," } )db.categories.insert( { _id: "MongoDB", path: ",Books,Programming,Databases," } )db.categories.insert( { _id: "dbm", path: ",Books,Programming,Databases," } )
Characteristics:
Retrieving sorting by query
Db.categories.find (). Sort ({path:1})
Quick Find child nodes
Db.categories.find ({path:/^,books,/}) Db.categories.find ({path:/^,books,/})
To create an index for a path
Db.categories.ensureIndex ({path:1})
Fifth: Set model
db.categories.insert( { _id: "Books", parent: 0, left: 1, right: 12 } )db.categories.insert( { _id: "Programming", parent: "Books", left: 2, right: 11 } )db.categories.insert( { _id: "Languages", parent: "Programming", left: 3, right: 4 } )db.categories.insert( { _id: "Databases", parent: "Programming", left: 5, right: 10 } )db.categories.insert( { _id: "MongoDB", parent: "Databases", left: 6, right: 7 } )db.categories.insert( { _id: "dbm", parent: "Databases", left: 8, right: 9 } )
Characteristics:
Quickly get child nodes
var databasecategory = Db.categories.findOne ({_id: "Databases"}); Db.categories.find ({left: {$gt: Databasecategory.left}, right: {$lt: Databasecategory.right}});
Content modification is inefficient for static trees.
MongoDB tree-shaped structure notation