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

Jak rekurencyjnie odpytywać strukturę drzewa za pomocą MongoDB?

W zależności od przypadku użycia MongoDB v3.4 udostępnia potok agregacji operator o nazwie $graphLookup . Operator agregacji może przeprowadzić wyszukiwanie cykliczne w kolekcji. Zobacz więcej definicji definicji $graphLookup .

Używając hierarchii dokumentów i powyższych wartości jako przykładów, możesz spróbować uruchomić agregację poniżej:

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"}
                  }}
]);

Powyższe powinno zwrócić wynik jak poniżej:

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

To powiedziawszy, jeśli masz dużą kolekcję, powyższe zapytanie może nie być skuteczne, ponieważ wykonasz $unwind na każdym dokumencie i nie będą mogli korzystać z indeksów. Jak sugerują inni, powinieneś ponownie rozważyć strukturę modelu dokumentu. Zobacz Struktury drzewiaste modeli danych . Optymalizuj w oparciu o logikę aplikacji i przypadek użycia zapytań i pozwól, aby podążał za elastycznym schematem dokumentu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoError:Topologia jest zamknięta, połącz się

  2. MongoDB:czy używanie identyfikatora dokumentu w miejscach publicznych jest bezpieczne?

  3. Zapytanie MongoDB do aktualizacji zagnieżdżonej tablicy

  4. Jak zwrócić wartość logiczną w kategorii mongodb?

  5. MongoDb Pipeline Aggregation sortowanie poddokumentów