如何在mongodb中使用mapReduce发出一个值数组?
我正在尝试编写一个mapReduce查询,以查找每个制造商价格加里程值最低的汽车。我对这一点相当陌生,不知道如何释放一对值(即Milage和Price),然后将它们减少为一个值如何在mongodb中使用mapReduce发出一个值数组?,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在尝试编写一个mapReduce查询,以查找每个制造商价格加里程值最低的汽车。我对这一点相当陌生,不知道如何释放一对值(即Milage和Price),然后将它们减少为一个值 var mapFunction = function () { var key = this._id; var values = [this.Milage, this.Price]; emit(key, values); }; //Reducing failes here! var reduceFuncti
var mapFunction = function () {
var key = this._id;
var values = [this.Milage, this.Price];
emit(key, values);
};
//Reducing failes here!
var reduceFunction = function (key, values) {
let reducedValue = 0;
values.forEach((num) => {
reducedValue += parseFloat(num);
});
return reducedValue;
};
lowestValuePerManufacturer = async () => {
const client = await MongoClient.connect(url, {
useNewUrlParser: true,
useUnifiedTopology: true,
}).catch((err) => console.log("Could not connect to MongoDB", err));
try {
const db = client.db(dbName);
const collection = db.collection(collectionName);
//Query starts here!
const res = await collection.mapReduce(mapFunction, reduceFunction, {
out: { inline: 1 },
});
console.log(res);
} catch (err) {
///
}
};
数据是汽车对象的数组,如
{
"Manufacturer": "Fiat",
"Colour": "Black",
"Model": "Panda",
"Milage": 33292.0,
"Price": 2668.32,
"Classification": "Motor Cars",
"Extras": [
"SatNav",
"ABS"
]
},
因此,我们的想法是使用聚合:
Price
和Milage
之和的最小值db.cars.aggregate([
{
$group:{
_id:“$Manufacturer”,
最低价格/里程:{
$min:{
$add:[“$Price”、“$Milage”]
}
}
}
},
{
$项目:{
_id:0,
制造商:“$\u id”,
最低价格里程:$min价格里程
}
}
]);
输出:
/*1*/
{
“制造商”:“奥迪”,
“最低价格/里程”:36020
},
/* 2 */
{
“制造商”:“现代”,
“最低价格/里程”:22083
}
cars
集合中的测试数据:
[
{
“_id”:ObjectId(“…”),
“制造商”:“现代”,
“颜色”:“黑色”,
“模型”:“重音”,
“Milage”:29,
“P15395ice”:1
},
{
“_id”:ObjectId(“…”),
“制造商”:“现代”,
“颜色”:“红色”,
“模型”:“场地”,
“Milage”:33,
“价格”:22050
},
{
“_id”:ObjectId(“…”),
“制造商”:“奥迪”,
“颜色”:“蓝色”,
“型号”:“Q3”,
“Milage”:20,
“价格”:36000
},
{
“_id”:ObjectId(“…”),
“制造商”:“奥迪”,
“颜色”:“蓝色”,
“型号”:“A4”,
“Milage”:31,
“价格”:40900
}
]
Hi。为什么需要映射/减少?当您可以按制造商分组数据并找到最低价格时。正如您在官方文档中所看到的,MongoDB鼓励您将聚合管道与$group
一起使用,而不是映射/reduce:Hello@dheemanthb,这与我在此之后尝试使用$group的文档相同。你能告诉我如何使用聚合管道来实现我的目标吗?谢谢!我仍然会尝试使用map/reduce制作一个等价物,因为它属于我的作业。SheeshMongoDB免费检查这两道菜:1。2:是的,我想是这样的!再次感谢你