あなたは正しい場所にいましたが、 $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 }
}}
]