sql >> データベース >  >> NoSQL >> MongoDB

モンゴエイジグループアグリゲーション

    あなたは正しい場所にいましたが、 $cond これらの操作を「ネスト」する必要がある3つの引数(評価、真の結果、偽の結果)が必要です。これらの操作は、後続の各$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. MongoDBと複合主キー

    2. Mongodbグループとプロジェクトオペレーター

    3. MongoDBドキュメント内の一意の埋め込み/ネストされたオブジェクトのリストを取得する

    4. pymongoはリモートサーバー上のデータベースに接続できません