sql >> Database >  >> NoSQL >> MongoDB

Mongodb:krijg alleen bladeren van de boom

Als u een veld parent . toevoegt om de ouder voor elk knooppunt vast te leggen, kan het helpen om de query's op een grotere dataset te optimaliseren. Bijvoorbeeld:

{"parent": "", "node": "#a"}
{"parent": "#a", "node": "#a#b"}
{"parent": "#a", "node": "#a#c"}
{"parent": "#a#b", "node": "#a#b#1"}
{"parent": "#a#b", "node": "#a#b#2"}
{"parent": "#a#c", "node": "#a#c#1"}
{"parent": "#a#c#1", "node": "#a#c#1#x"}

Dan kunt u $graphLookup (aggregatie) gebruiken bediener te doorkruisen.

Een alternatief voor uw regex-query om alle onderliggende elementen van een boomknooppunt voor #a#c te krijgen :

db.tree.aggregate([
        {$match:{"node":"#a#c"}}, 
        {$graphLookup:{
                       from:"tree", 
                       startWith:"$node", 
                       connectFromField:"node", 
                       connectToField:"parent", 
                       as:"dep"}}, 
        {$project:{"dep.node":1, "_id":0}}
])

Vind alleen bladeren van #a#c :

db.tree.aggregate([
        {$match:{"parent": {$regex:"^#a#c"}}}, 
        {$graphLookup:{
                       from:"tree", 
                       startWith:"$node", 
                       connectFromField:"node", 
                       connectToField:"parent", 
                       as:"dep"}}, 
        {$match:{dep:[]}}, 
        {$project:{"_id":0, node:1}}
])

Ik zou ook aanraden om Model Tree Structures te bekijken , zijn er verschillende manieren om boomgegevensstructuren in MongoDB te gebruiken. Afhankelijk van uw gebruikssituatie moet u bepaalde structuren gebruiken voor de voordelen van uw toepassing.




  1. Wat is het verschil tussen deze twee MongoDB-query's?

  2. MongoDB C#-stuurprogramma en DateTime-veld

  3. NoSQL - MongoDB versus CouchDB

  4. Mongoose:hoe gaat het met _doc?