MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB агрегиране - стойности на полета на проекта като полета

Можете да обобщите както е показано по-долу:

  • $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 }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Мониторинг и защита на MongoDB с ClusterControl Advisors

  2. Страниране с диапазони при заявки и сортиране на динамични, неуникални полета в mongodb

  3. MongoDB $count Оператор за агрегиране

  4. MongoDB $ log10

  5. Какъв е правилният модел за вложени схеми в Mongoose/MongoDB?