Я пытаюсь объединить две коллекции, используя MapReduce. Они имеют идентичную структуру, например:Union Set using MapReduce MongoDB
db.tableR.insert({product:"A", quantity:150});
db.tableR.insert({product:"B", quantity:100});
db.tableR.insert({product:"C", quantity:60});
db.tableR.insert({product:"D", quantity:200});
db.tableS.insert({product:"A", quantity:150});
db.tableS.insert({product:"B", quantity:100});
db.tableS.insert({product:"F", quantity:220});
db.tableS.insert({product:"G", quantity:130});
Я хочу, чтобы MapReduce удалял дубликаты.
Я создаю карту, которая делит сбор согласно количеству:
map = function(){
if (this.quantity<150){
var key=0;
}else{
var key=1;
}
var value = {"product":this.product, "quantity":this.quantity};
emit(key,value);
};
Теперь я хочу, что уменьшить функция удаляет дубликаты, но я не могу найти способ, чтобы добавить новые уменьшенный вар.
Это то, что я пробовал:
reduce = function(keys,values){
var reduced = {
product:"",
quantity:""
};
for (var i=0; i < values.length;i++)
{
if(values[i].product !== null) {reduced.insert({product: values[i].product, quantity: values[i].quantity})}
}
return reduced;};
db.tableR.mapReduce(map,reduce,{out:'map_reduce_result'});
db.tableS.mapReduce(map,reduce,{out:'map_reduce_result'});
db.map_reduce_result.find();
Какую функцию можно использовать?
Мой ожидаемый результат:
{"_id" : 0, "value" : {"product" : "B","quantity" : 100}}
{"_id" : 0, "value" : {"product" : "C","quantity" : 60}}
{"_id" : 0, "value" : {"product" : "G","quantity" : 130}}
{"_id" : 1, "value" : {"product" : "A","quantity" : 150}}
{"_id" : 1, "value" : {"product" : "D","quantity" : 200}}
{"_id" : 1, "value" : {"product" : "F","quantity" : 220}}
Не могли бы вы показать нам ожидаемый выходной документ? Причина в том, что было бы легче достичь одной и той же цели с помощью структуры агрегации (с потенциальным использованием индексов и соответствующим приростом производительности), но я не уверен, чего вы хотите достичь. –
@MarkusWMahlberg Конечно, я только что добавил.Я просто хочу реализовать MapReduce – Alejandra