Nota
Canalización de agregación como alternativa a Map-Reduce
A partir de MongoDB 5.0, map-reduce está obsoleto:
En lugar de map-reduce, debería usar una canalización de agregación. Las canalizaciones de agregación ofrecen mejor rendimiento y usabilidad que map-reduce.
Puede reescribir las operaciones de map-reduce utilizando etapas de canalización de agregación, como
$group, y$mergeotros.Para las operaciones map-reduce que requieren una funcionalidad personalizada, puedes utilizar los operadores de agregación
$accumulatory$function. Puedes utilizar esos operadores para definir expresiones de agregación personalizadas en JavaScript.
Para ejemplos de alternativas de pipeline de agregación a map-reduce, consulte:
Una canalización de agregación también es más fácil de solucionar que una operación de mapa-reducción.
La map función es una función de JavaScript que asocia o “mapea” un valor con una clave y emite el par clave-valor durante una operación de mapeo-reducción.
Verificar pares de clave y valor
Para verificar los pares key y value emitidos por la función map, guardar su propia función emit.
Considere una colección orders que contiene documentos del siguiente prototipo:
{ _id: ObjectId("50a8240b927d5d8b5891743c"), cust_id: "abc123", ord_date: new Date("Oct 04, 2012"), status: 'A', price: 250, items: [ { sku: "mmm", qty: 5, price: 2.5 }, { sku: "nnn", qty: 5, price: 2.5 } ] }
Define la función
mapque asignapriceacust_idpara cada documento y emite el parcust_idyprice:var map = function() { emit(this.cust_id, this.price); }; Define la función
emitpara imprimir la clave y el valor:var emit = function(key, value) { print("emit"); print("key: " + key + " value: " + tojson(value)); } Invoque la función
mapcon un solo documento de la colecciónorders:var myDoc = db.orders.findOne( { _id: ObjectId("50a8240b927d5d8b5891743c") } ); map.apply(myDoc); Verifique que el par de clave y valor sea tal como lo esperaba.
emit key: abc123 value:250 Invoque la función
mapcon varios documentos de la colecciónorders:var myCursor = db.orders.find( { cust_id: "abc123" } ); while (myCursor.hasNext()) { var doc = myCursor.next(); print ("document _id= " + tojson(doc._id)); map.apply(doc); print(); } Verifique que los pares clave y valor sean los esperados.
Tip
La map función debe cumplir varios requisitos. Para obtener una lista de todos los requisitos de la map función, consulte,mapReduce o mongosh método db.collection.mapReduce() auxiliar.