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

Mongo Age Group Aggregation

Du var på det rigtige sted, men som $cond kræver tre argumenter (som er evalueringen , sandt resultat og falsk resultat), skal du "indlejre" disse operationer, som hver efterfølgende $cond som false tilstand. Så din syntaks her er lidt forkert.

Du kan også gøre dette bare i $group for at undgå at gå gennem hele samlingen med en separat $project . Baseret på den dokumentstruktur, du giver som eksempel, vil du danne sådan:

$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 )
    )
  )
);

Bemærk også, at logiske sammenligningsoperatorer såsom $lt arbejde anderledes i disse stadier end deres forespørgselsmodparter. De tager selv en række argumenter som værdier til at teste og sammenligne. De returnerer true/false baseret på den sammenligning, som er kravet til det første argument til $cond .

Altid praktisk at have en json_encode et sted, hvor du fejlretter formen af ​​pipeline-forespørgsler, da JSON vil være det generelle omfang af eksempler:

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

Hvilket giver den fælles JSON-struktur:

[
    { "$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. MongoDB deleteOne()

  2. Sammenlign array-elementer, fjern den med den laveste score

  3. MongoDb aggregering $lookup med udenlandske _id'er i arrays

  4. Kunne ikke oprette forbindelse til Redis på 127.0.0.1:6379:Forbindelse nægtet med hjemmebrygget