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

Optymalizacja łączenia zapytań Mongodb

Myślę, że chcesz zrobić coś takiego. Nie testowałem tego zapytania, ale tego bym spróbował na Twoim miejscu. Jest to możliwe tylko w wersji 3.6 mongodb, ponieważ obsługuje wiele złączeń. Ideą jest połączenie wszystkich 3 kolekcji. Pierwsze połączenie to Parents i Person by Parents id, a Persons "parentsId". Drugie połączenie to Rodzice i Dziadkowie. Następnie filtrujesz według nazwiska dziadka, a otrzymasz dokument zawierający tego dziadka, jego syna (rodzica) i wnuka (osobę). Następnie po prostu wyświetlasz osobę.

    db.Parents.aggregate([
       {
          $lookup:{
             from:"Person",
             localField:"_id",
             foreignField:"parentId",
             as:"Person"
          }
       },
       {
          $unwind:"$Person"
       },
       {
          $lookup:{
             from:"Grandparents",
             localField:"grandparentId",
             foreignField:"_id",
             as:"Grandparents"
          }
       },
       {
          $unwind:"$Grandparents"
       },
       {$match:{Grandparents.name:"x"}},
       {$project:{Person.name:1,Person._id:1}}
}])

Myślę, że to załatwi sprawę




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wykonać wyszukiwanie wielu tekstów za pomocą zapytania $text i $lub w mongodb / mongoose?

  2. PyMongo -- iteracja kursora

  3. Różnica między Numberlong(x) i Numberlong(x)

  4. MongoDB:wstaw dokumenty z określonym identyfikatorem zamiast automatycznie generowanego ObjectID

  5. nie można uzyskać dostępu do właściwości wymaganego użytkownika