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

Jak zwrócić tylko zagnieżdżone dokumenty tablicy ze wszystkich dokumentów?

Możesz to zrobić za pomocą .aggregate() i głównie $unwind operator rurociągu:

We współczesnym MongoDB 3.4 i nowszych możesz używać w tandemie z $replaceRoot

Model.aggregate([
  { "$unwind": "$books" },
  { "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {

})

We wcześniejszych wersjach wszystkie pola były określane za pomocą $project :

Model.aggregate([
  { "$unwind": "$books" },
  { "$project": {
    "_id": "$books._id",
    "pages": "$books.pages",
    "title": "$books.title"
  }}
],function(err,results) {

})

Więc $unwind jest tym, czego używasz do dekonstruowania lub „denormalizacji” wpisów tablicy do przetwarzania. W efekcie tworzy to kopię całego dokumentu dla każdego członka tablicy.

Reszta zadania polega na zwracaniu "tylko" tych pól, które są obecne w tablicy.

Nie jest to jednak zbyt mądre posunięcie. Jeśli Twoim zamiarem jest zwrócenie zawartości osadzonej w tablicy dokumentu, lepiej byłoby umieścić tę zawartość w osobnej kolekcji.

Jest o wiele lepszy pod względem wydajności, oddzielając wszystkie dokumenty z kolekcji za pomocą struktury agregacji, aby wyświetlić tylko te dokumenty z tablicy.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pobierz najnowszą płytę z kolekcji mongodb

  2. Jak zainicjować bazę danych mongo za pomocą docker-compose?

  3. Sklonuj kolekcję w MongoDB

  4. MongoDB znajdź()

  5. Uzyskaj liczbę otwartych połączeń w mongoDB za pomocą java