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

Агрегиране на възрастова група Mongo

Бяхте на правилното място, но като $cond изисква три аргумента (които са оценката, верен резултат и неверен резултат), трябва да "вложите" тези операции, които всяка следваща $cond като false състояние. Така че вашият синтаксис тук е малко неправилен.

Можете също да направите това само в $group за да избегнете преминаването през цялата колекция с отделен $project . Въз основа на структурата на документа, която давате като пример, бихте формирали така:

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

Също така отбелязваме, че операторите за логическо сравнение като $lt работят по различен начин на тези етапи в сравнение със съответните им заявки. Те самите приемат набор от аргументи, които са стойностите за тестване и сравнение. Те връщат true/false въз основа на това сравнение, което е изискването за първия аргумент на $cond .

Винаги е удобно да имате json_encode някъде, където отстранявате грешки във формата на конвейерни заявки, тъй като JSON ще бъде общият обхват на примерите:

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

Което дава общата JSON структура:

[
    { "$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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Изтрийте ключ от документ на MongoDB с помощта на Mongoose

  2. Топологията за хвърляне на Монго беше унищожена след една връзка

  3. MongoDB:$elemMatch

  4. Модел за промяна на времето на изпълнение с mongodb/mongoid

  5. Как да премахна празните туитове с помощта на filter() в pyspark?