J'ai une base de données MongoDB avec des documents qui contiennent un champ de filtre. Les documents ressemblent à ceci:mongodb compte l'objet égal
{
"_id": ObjectId("503208f5b5db0135387d9249"),
"name": "name1",
"filter": "facebook"
} {
"_id": ObjectId("503208f5b5db0135387d9249"),
"name": "name2",
"filter": "twitter"
}
{
"_id": ObjectId("503208f5b5db0135387d9249"),
"name": "name3",
"filter": "twitter"
}
Et je veux compter par type. Cet exemple devrait ressembler à ceci:
facebook => 1, twitter => 2
Avec le code rubis, le comptage est très lent.
Le filtre est une chaîne qui peut être n'importe quoi. E.g:
{facebook : 1203, twitter : 201, wherever : 200, othertype : 400}
J'utilise mongo mapper (driver ruby).
============== EDIT 3
Enfin, il travaille. voici le code pour le pilote ruby:
def map
'function(){
emit(this.plataforma, 1);
}'
end
def reduce
'
function(prev, current) {
var n = 0;
current.forEach(function(v){
n+=v;
});
return n;
}'
end
def build
Mention.collection.map_reduce(map, reduce, :query => {})
end
quelle version de mongo utilisez-vous? – soulcheck
J'utilise mongo 1.6.3. –
Vous pouvez utiliser le framework d'agrégation avec '$ match' et' $ sum' ou un MR ou une pré-agrégation ici – Sammaye