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

Jak wybrać poddokumenty za pomocą MongoDB

Trochę spóźniony na imprezę, ale mam nadzieję, że pomoże innym, którzy szukają rozwiązania. Znalazłem sposób, aby to zrobić, używając frameworka agregacji i łącząc $project i $unwind z $match, łącząc je razem. Zrobiłem to za pomocą PHP, ale powinieneś zrozumieć:

    $ops = array(
        array('$match' => array(
                'collectionColumn' => 'value',
            )
        ),
        array('$project' => array(
                'collection.subcollection' => 1
            )
        ),
        array('$unwind' => '$subCollection'),
        array('$match' => array(
                subCollection.subColumn => 'subColumnValue'
            )
        )
    );

Pierwsze dopasowanie i projekt są używane tylko do odfiltrowania, aby przyspieszyć, a następnie odprężenie na podkolekcji wypluwa każdy element podkolekcji po elemencie, który można następnie przefiltrować za pomocą ostatecznego dopasowania.

Mam nadzieję, że to pomoże.

AKTUALIZACJA (od Ryana Wheale'a):

Następnie możesz $group dane z powrotem do swojej pierwotnej struktury. To jak mieć $elemMatch który zwraca więcej niż jeden poddokument:

array('$group' => array(
        '_id' => '$_id',
        'subcollection' => array(
            '$push' => '$subcollection'
        )
    )
);

Przetłumaczyłem to z Node na PHP, więc nie testowałem w PHP. Jeśli ktoś chce wersję Node, zostaw komentarz poniżej, a ja się zobowiązuję.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dlaczego mongoose używa schematu, kiedy zaletą mongodb jest to, że jest pozbawiony schematu?

  2. Instalowanie MongoDB na CentOS 7

  3. Której bazy danych NoSQL powinienem używać do logowania?

  4. Bitwa o bazy danych NoSQL — porównanie MongoDB i Cassandra

  5. MongoDB:Jak zdefiniować schemat?