Solucionar problemas da função de mapa
Nesta página
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
,$merge
e outros.Nas operações de map-reduce que exigem funcionalidade personalizada, você pode usar os operadores de agregação
$accumulator
e$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 a uma chave e emite o par de chave e valor durante uma operação de 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
map
que mapeia oprice
para ocust_id
para cada documento e emite o parcust_id
eprice
:var map = function() { emit(this.cust_id, this.price); }; Defina a função
emit
para imprimir a chave e o valor:var emit = function(key, value) { print("emit"); print("key: " + key + " value: " + tojson(value)); } Invoque a função
map
com 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
map
com 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
Veja também:
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 auxiliar db.collection.mapReduce()
.