sql >> Database >  >> NoSQL >> MongoDB

Mongo Age Group Aggregation

Je was op de juiste plaats, maar als $cond vereist drie argumenten (zijnde de evaluatie , het ware resultaat en het valse resultaat) u moet deze bewerkingen "nesten", die elke volgende $cond als de false voorwaarde. Dus je syntaxis is hier een beetje verkeerd.

Je kunt dit ook gewoon doen in de $group om te voorkomen dat u de hele collectie doorloopt met een aparte $project . Op basis van de documentstructuur die u als voorbeeld geeft, zou u zich als volgt vormen:

$pipeline = array(
  array(
    '$group' => array(
      '_id' => array(
        '$cond' =>  array(
          array('$lt' => array( '$age', 18 )),
          'age_0_17',
          array(
            '$cond' => array(
              array( '$lte' => array( '$age', 25 )),
              'age_18_25',
              array(
                '$cond' => array(
                  array( '$lte' => array ( '$age', 32 )),
                  'age_26_32',
                  'age_Above_32'
                )
              )
            )
          )
        )
      ),
      'count' => array( '$sum' => 1 )
    )
  )
);

Merk ook op dat logische vergelijkingsoperatoren zoals $lt werken in deze fasen anders dan hun tegenhangers voor zoekopdrachten. Ze nemen zelf een reeks argumenten als de waarden om te testen en te vergelijken. Ze retourneren true/false gebaseerd op die vergelijking, wat de vereiste is voor het eerste argument voor $cond .

Altijd handig om een ​​json_encode . te hebben ergens waar u de vorm van pijplijnquery's debugt, aangezien JSON het algemene bereik van voorbeelden zal zijn:

echo json_encode( $pipeline, JSON_PRETTY_PRINT ) . "\n";

Wat de gemeenschappelijke JSON-structuur oplevert:

[
    { "$group": {
        "_id": { 
            "$cond":[
                { "$lt":["$age",18] },
                "age_0_17",
                { "$cond":[
                    { "$lte":["$age",25] },
                    "age_18_25",
                    { "$cond":[
                        { "$lte":["$age",32] },
                        "age_26_32",
                        "age_Above_32"
                    ]}
                ]}
            ]
        },
        "count":{ "$sum": 1 }
    }}
]



  1. Wat zijn de belangrijkste verschillen tussen Redis Pub/Sub en Redis Stream?

  2. Hoe verbinding te maken met mongoDB Atlas met behulp van mangoest

  3. Hoe het BSON-type van het Rust Mongo-stuurprogramma naar ObjectId te converteren?

  4. Is redis een duurzame datastore?