sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB-aggregation - projekt fältvärden som fält

Du kan sammanställa enligt nedan:

  • $group av subject och importance , hämta respektive antal.
  • Sedan kommer den knepiga delen, den villkorliga $project , skulle den växa linjärt med avseende på antalet alternativ importance fältet kunde hålla. för närvarande är den tre - high , low och medium .
  • $group resultatet tillbaka igen med subject och använd $sum operatör för att accumulate räkningarna för de olika värdena i betydelsefältet.

exempelkod:

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"}}},
])

testdata:

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"}
])

resultat:

{ "_id" : "geography", "low" : 2, "medium" : 0, "high" : 0 }
{ "_id" : "history", "low" : 2, "medium" : 1, "high" : 1 }



  1. Multi-samling, multi-dokument "transaktioner" i MongoDB

  2. Är det möjligt att casta i en MongoDB-Query?

  3. Uppgradera till Ubuntu 15.04 från 14.10 breaks mongo - hur fixar jag?

  4. Hur ändrar jag en MongoDB-användares lösenord?