आप सही जगह पर थे, लेकिन $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 }
}}
]