sql >> Databáze >  >> NoSQL >> MongoDB

Mongodb:získejte pouze listy stromu

Pokud přidáte pole parent pro zachycení rodiče pro každý uzel může pomoci optimalizovat dotazování na větší datové sadě. Například:

{"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"}

Pak můžete použít $graphLookup (agregace) operátor procházet.

Alternativa k dotazu na regulární výraz k získání všech potomků uzlu stromu pro #a#c :

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

Najít pouze listy #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}}
])

Také bych doporučil zkontrolovat Model Tree Structures , existují různé způsoby, jak používat stromové datové struktury v MongoDB. V závislosti na vašem případu použití byste měli použít určité struktury pro výhody dotazování vaší aplikace.




  1. JavaScript nepřiřazuje prvek k objektu

  2. Automatické počítání polí v mongodb

  3. najdete v MongoCollection<Document>

  4. Jak obnovit data redis ze snímku (soubor rdb) zkopírovaného z jiného počítače?