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

Как да заявите дървовидна структура рекурсивно с MongoDB?

В зависимост от вашия случай на употреба, MongoDB v3.4 предоставя тръбопровод за агрегиране оператор, наречен $graphLookup . Операторът за агрегиране може да извърши рекурсивно търсене на колекция. Вижте повече определения за определение на $graphLookup .

Като използвате йерархията на вашите документи и стойностите по-горе като примери, можете да опитате да работите под агрегирането:

db.collectionName.aggregate([

                {$unwind:{
                        path:"$childrenIdList", 
                        preserveNullAndEmptyArrays: true}
                  }, 
                {$graphLookup:{
                        from:"collectionName", 
                        startWith:"$_id", 
                        connectFromField:"_id", 
                        connectToField:"childrenIdList", 
                        as:"myparents",  
                        restrictSearchWithMatch: {"_id"}}
                  }, 
                {$match: {"_id": 7 } },
                {$group:{
                        _id:"$_id", 
                        parents:{$addToSet:"$myparents._id"}
                  }}
]);

Горното трябва да върне резултата по-долу:

{ "_id" : 7, "parents" : [ [ 1, 2, 4 ] ] }

Като каза това, ако имате голяма колекция, горната заявка може да не е ефективна, тъй като ще изпълнявате $unwind на всеки документ и няма да може да използва индекси. Както е предложено от други, трябва да преразгледате структурата на вашия модел на документа. Вижте Дървовидни структури на модели на данни . Оптимизирайте въз основа на логиката на вашето приложение и случая на използване на заявки и оставете гъвкавата документна схема да последва.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb - създайте doc, ако не съществува, в противен случай натиснете към масив

  2. Актуализирайте обект с даден ID, вграден в масив без преструктуриране на базата данни на Mongo

  3. Актуализиране на конкретен елемент в масив с MongoDB / Meteor

  4. Посочете името на колекцията MongoDb по време на изпълнение в пролетното зареждане

  5. групи по месец и година с помощта на mongoose.js