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

Как да изберете поддокументи с MongoDB

Малко късно за партито, но се надяваме да помогнем на други, които търсят решение. Намерих начин да направя това с помощта на рамката за агрегиране и комбинирането на $project и $unwind с $match, като ги свързвам заедно. Направих го с PHP, но трябва да разберете същността:

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

Първото съвпадение и проект се използват само за филтриране, за да стане по-бързо, след което при отвиване на подколекция изхвърля всеки елемент от подколекция, който след това може да се филтрира с помощта на окончателното съвпадение.

Надявам се това да помогне.

АКТУАЛИЗАЦИЯ (от Райън Уийл):

След това можете да $group данните обратно в първоначалната им структура. Това е като да имате $elemMatch който връща повече от един поддокумент:

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

Преведох това от Node на PHP, така че не съм тествал в PHP. Ако някой иска версията на Node, да остави коментар по-долу и ще се задължа.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. tar gzip mongo dump като MySQL

  2. Изображението, върнато от REST API, винаги се показва неработещо

  3. Премахване на database.yml при използване на Mongoid в Rails 3.2

  4. Използвайте $gte и <e оператор mongo, ако датата е в низов формат в mongodb

  5. MongoDB и се присъединява