आप नीचे के रूप में एकत्र कर सकते हैं:
$group
subject
. द्वारा औरimportance
, संबंधित गणना प्राप्त करें।- फिर मुश्किल हिस्सा आता है, सशर्त
$project
, यहimportance
. विकल्पों की संख्या के संबंध में रैखिक रूप से बढ़ेगा क्षेत्र धारण कर सकता है। वर्तमान में यह तीन है -high
,low
औरmedium
। $group
subject
. द्वारा परिणाम फिर से वापस और$sum
का इस्तेमाल करेंaccumulate
करने के लिए ऑपरेटर महत्व क्षेत्र के विभिन्न मूल्यों के लिए मायने रखता है।
नमूना कोड:
db.t.aggregate([
{$group:{"_id":{"subject":"$subject",
"importance":"$importance"},
"count":{$sum:1}}},
{$project:{"_id":0,
"subject":"$_id.subject",
"result":{$cond:[
{$eq:["$_id.importance","high"]},
{"high":"$count"},
{$cond:[{$eq:["$_id.importance","low"]},
{"low":"$count"},
{"medium":"$count"}]}]}}},
{$group:{"_id":"$subject",
"low":{$sum:"$result.low"},
"medium":{$sum:"$result.medium"},
"high":{$sum:"$result.high"}}},
])
परीक्षण डेटा:
db.t.insert([
{"subject":"history","importance":"high"},
{"subject":"geography","importance":"low"},
{"subject":"history","importance":"low"},
{"subject":"history","importance":"medium"},
{"subject":"geography","importance":"low"},
{"subject":"history","importance":"low"}
])
परिणाम:
{ "_id" : "geography", "low" : 2, "medium" : 0, "high" : 0 }
{ "_id" : "history", "low" : 2, "medium" : 1, "high" : 1 }