Observação
Pipeline de Agregação como Alternativa à Redução de Mapa
A partir do MongoDB , 5.0, map-reduce está obsoleto:
Em vez de map-reduce, você deve usar um aggregation pipeline. aggregation pipeline fornece melhor desempenho e usabilidade do que a redução de mapa.
Você pode reescrever operações de redução de mapa utilizando estágios do pipeline de agregação, como
$group,$mergee outros.Nas operações de map-reduce que exigem funcionalidade personalizada, você pode usar os operadores de agregação
$accumulatore$function. Você pode usar esses operadores para definir expressões de agregação personalizadas no JavaScript.
Para obter exemplos de alternativas de aggregation pipeline para map-reduce, consulte:
Um aggregation pipeline também é mais fácil de solucionar problemas do que uma operação de map-reduce.
A função map é uma função JavaScript que associa ou "mapeia" um valor com uma chave e emite o par de chave e valor durante uma operação map-reduce .
Verificar pares de chave e valor
Para verificar os pares key e value emitidos pela função map , escreva sua própria função emit .
Considere uma collection orders que contenha documentos do seguinte protótipo:
{ _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 } ] }
Defina a função
mapque mapeia opricepara ocust_idpara cada documento e emite o parcust_ideprice:var map = function() { emit(this.cust_id, this.price); }; Defina a função
emitpara imprimir a chave e o valor:var emit = function(key, value) { print("emit"); print("key: " + key + " value: " + tojson(value)); } Invoque a função
mapcom um único documento da collectionorders:var myDoc = db.orders.findOne( { _id: ObjectId("50a8240b927d5d8b5891743c") } ); map.apply(myDoc); Verifique se o par de chaves e valores é como o esperado.
emit key: abc123 value:250 Invocar a função
mapcom vários documento da collectionorders: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 se os pares de chave e valor são conforme o esperado.
Dica
A função map deve atender a vários requisitos. Para obter uma lista de todos os requisitos para a função map , consulte mapReduce ou mongosh método assistente db.collection.mapReduce().