2016-08-03 5 views
0

Итак, у меня есть коллекция пользователей. Документ пользователь является очень простой документ, и выглядит следующим образом:Подсчет количества уникальных значений в массиве в коллекции MongoDB

{ 
    username: "player101", 
    badges: ["score10", "score100"] 
} 

Так как я могу запросить, чтобы увидеть, сколько раз каждое уникальное значение в массиве значков происходит по всей коллекции?

ответ

1

Использование aggregation с $unwind и $group этапов, где вы можете подвести значки с $sum арифметического оператора

db.players.aggregate([ 
    { 
    $unwind: "$badges" 
    }, 
    { 
    $group: 
     { 
     _id: "$badges", 
     count: { $sum: 1 } 
     } 
    } 
]); 

по сбору players с документами

{ "username" : "player101", "badges" : [ "score10", "score100" ] } 
{ "username" : "player102", "badges" : [ "score11", "score100" ] } 
{ "username" : "player103", "badges" : [ "score11", "score101" ] } 
{ "username" : "player104", "badges" : [ "score12", "score100" ] } 

дает результат

{ "_id" : "score101", "count" : 1 } 
{ "_id" : "score11", "count" : 2 } 
{ "_id" : "score12", "count" : 1 } 
{ "_id" : "score100", "count" : 3 } 
{ "_id" : "score10", "count" : 1 } 
Смежные вопросы