MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongodb:zdobądź tylko liście drzewa

Jeśli dodasz pole parent aby uchwycić rodzica dla każdego węzła, może pomóc zoptymalizować zapytania dotyczące większego zestawu danych. Na przykład:

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

Następnie możesz użyć $graphLookup (agregacja) operatora do przejścia.

Alternatywa dla zapytania wyrażeń regularnych, aby uzyskać wszystkie dzieci węzła drzewa dla #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}}
])

Znajdź tylko liście #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}}
])

Polecam również przejrzeć Struktury drzew modeli , istnieją różne sposoby wykorzystania drzewiastych struktur danych w MongoDB. W zależności od przypadku użycia należy zastosować określone struktury, aby uzyskać korzyści związane z zapytaniami aplikacji.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można połączyć się z serwerem 127.0.0.1:27017 próba połączenia nie powiodła się MongoDB

  2. Jak znaleźć według id w golangu i mongodb

  3. Jak przenieść dane z MongoDB do SQL-Server?

  4. MongoDB nie ma autoryzacji dla zapytania - kod 13

  5. Pola wyboru mongusty (zagnieżdżone)