unir sumar suma operadores metodo funcion ejemplo datos comparacion colecciones campo agregar mongodb mapreduce mongodb-query mongodb-php nosql

operadores - sumar un campo en mongodb



mongodb-Encontrar la suma de un campo(si existe) en una colección (1)

Finalmente pude descifrarlo y ponerlo en funcionamiento. He compartido mi código a continuación.

var map = function(){ if(this.fields.rating){ emit(this.fields.rating.parent,this.fields.rating.weight); } } var reduce = function (k, vals) { var sum = 0; var count = 0; for (var i in vals) { sum += vals[i]; count++; } var avg = (sum/count); return avg; } var res = db.myCollection.mapReduce(map, reduce, {out:"myoutput"});

Tengo la siguiente estructura mongodb

{ "_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, }, } }

El atributo "fields" tiene 2 campos "rating" y "capacity" en él. Pero, cada entrada puede tener un conjunto diferente de campos. p.ej. dimensión, precio, etc.

Me gustaría encontrar todas las entradas que tienen "calificación" en "campos" y obtener una suma del atributo "peso" de todas esas entradas.

Soy un novato en mongodb y traté de usar la función mapReduce, pero fue en vano.

A continuación se muestra el código que utilicé. Por favor, hágamelo saber dónde me salió mal o si hay una solución mejor en lugar de este código.

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 } });