je la structure mongodb suivantemongodb - Trouver la somme d'un champ (si elle existe) dans une collection
{
"_id": ObjectId("507c80a143188f9610000003"),
"date": ISODate("2012-10-15T21: 31: 13.0Z"),
"uid": NumberInt(35920),
"comp": NumberInt(770),
"fields": {
"rating": {
"parent": "rating",
"weight": NumberInt(2),
"rel_weight": 0.11,
},
"capacity": {
"parent": "capacity",
"weight": NumberInt(4),
"rel_weight": 0.89,
},
}
}
Les « champs » attribut a 2 champs « évaluation » et « capacité » en elle. Mais, chaque entrée peut avoir un ensemble de champs différent. par exemple. dimension, prix, etc.
Je voudrais trouver toutes les entrées qui ont "évaluation" sous "champs" et obtenir une somme d'attribut "poids" de toutes ces entrées. Je suis un débutant à mongodb et j'ai essayé d'utiliser la fonction mapReduce, mais sans succès.
Ci-dessous est le code que j'ai utilisé. Veuillez me faire savoir où je me suis trompé ou s'il y a une meilleure solution à la place de ce code.
function map(){
emit(this._id,{weight:this.fields.rating.weight});
}
function reduce(key,value){
var sum = 0;
for (var i=0; i<value.length; i++) {
sum += value[i].amount;
}
return sum;
}
res = db.collection_name.mapReduce(map, reduce, { query: {"fields.rating" : { $exists: true } });