sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB finder indlejrede objekter, der opfylder kriterier

Da arrays er indlejret, kan du ikke bruge grundlæggende projektion, som du kan med find. Også for at "filtrere" matrixindholdet fra et dokument, skal du "afvikle" matrixindholdet først. Til dette bruger du aggregeringsrammen:

   $results = $db->genealogical_data->aggregate(array(
       array( '$match' => array(
           'people.search_columns.givenname' => 'Valentine'
       )),
       array( '$unwind' => '$people' ),
       array( '$match' => array(
           'people.search_columns.givenname' => 'Valentine'
       )),
       array( '$group' => array(
           '_id' => '$id',
           'name' => array( '$first' => '$name' ),
           'people' => array( '$push' => '$people' )
       ))
   ));

Pointen med den første $match fase er at reducere de dokumenter, der muligvis matcher dine kriterier. Anden gang sker efter $unwind , hvor de faktiske "array"-elementer i dokumentet "filtreres" fra resultaterne.

Den sidste $group sætter det oprindelige array tilbage til det normale, minus de elementer, der ikke matcher kriterierne.




  1. Send formulardata til matrix af eksisterende MongoDB-dokument ved hjælp af Express og Mongoose

  2. Heroku kunne ikke autentificere mongolab

  3. Spring over og begræns for paginering for et Mongo-aggregat

  4. Hvordan håndterer MongoEngine indekser (oprettelse, opdatering, fjernelse)?