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 completa de los requisitos de la map función, consulte el mapReduce método mongosh auxiliar,db.collection.mapReduce() o.