MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb:вземете само листа от дърво

Ако добавите поле parent за улавяне на родителя за всеки възел, може да помогне за оптимизиране на заявките за по-голям набор от данни. Например:

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

След това можете да използвате $graphLookup (агрегиране) оператор за преминаване.

Алтернатива на вашата заявка за регулярен израз за получаване на всички дъщерни елементи на дървовиден възел за #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}}
])

Намерете само листа от #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}}
])

Бих препоръчал също да прегледате моделни дървовидни структури , има различни начини за използване на дървовидни структури от данни в MongoDB. В зависимост от вашия случай на употреба трябва да използвате определени структури за предимствата на заявките за вашето приложение.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Създаване на ISODate за MongoDB с PHP

  2. Как да изпълнявам mongo команди чрез шел скриптове? (моят не работи)

  3. MongoDB - Добавяне към набор и увеличаване

  4. Изтриването на (издърпване) на документ в масив от Mongoose не работи с ObjectID

  5. MongoDB mongoose поддокументи, създадени два пъти