sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man väljer underdokument med MongoDB

Lite sent till festen, men kommer förhoppningsvis att hjälpa andra som är på jakt efter en lösning. Jag har hittat ett sätt att göra detta genom att använda aggregeringsramverket och kombinera $project och $unwind med $matchen, genom att kedja ihop dem. Jag har gjort det med PHP men du borde förstå kärnan:

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

Den första matchningen och projektet används bara för att filtrera bort för att göra det snabbare, sedan spottar avkopplingen på undersamlingen ut varje undersamling objekt för objekt som sedan kan filtreras med den sista matchningen.

Hoppas det hjälper.

UPPDATERING (från Ryan Wheale):

Du kan sedan $group data tillbaka till sin ursprungliga struktur. Det är som att ha en $elemMatch som returnerar mer än ett underdokument:

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

Jag översatte detta från Node till PHP, så jag har inte testat i PHP. Om någon vill ha Node-versionen, lämna en kommentar nedan så tackar jag det.



  1. sparar bild till mongodb

  2. Hur drar man en instans av ett objekt i en array i MongoDB?

  3. Vad är det bästa sättet att göra ajax-paginering med MongoDb och Nodejs?

  4. Mongodb samlar sortering och gräns inom gruppen