mongodb - 如何根据某些条件获取文档的最大值
问题描述
我有以下简化的 MongoDB 集合
{
"_id":1,
"restaurant":"Gloriuos Food",
"cuisine":"Afghan",
"grades":[
{ "grade":"A",
"score":12
},
{
"grade":"B",
"score":8
}
]
}
{
"_id":2,
"restaurant":"Ariana",
"cuisine":"Afghan",
"grades":[
{ "grade":"A",
"score":8
},
{
"grade":"B",
"score":18
}
]
}
{
"_id":3,
"restaurant":"Seuda",
"cuisine":"American",
"grades":[
{ "grade":"A",
"score":4
},
]
}
{
"_id":4,
"restaurant":"Carvel",
"cuisine":"American",
"grades":[
{ "grade":"A",
"score":8
},
{
"grade":"B",
"score":8
}
]
}
我想有一个新的集合,其中关键是美食类型,值是在所有具有相同美食类型的餐厅和各自分数之间得分最高的餐厅名称。PS:分数仅基于等级数组的第一个值。
查看示例的预期结果
{"_id":"Afghan","value":["Gloriuos Food",12]}
{"_id":"American","value":["Carvel",8]}
这个结果也是有效的
{"_id":"Afghan","value":{"Gloriuos Food",12}}
{"_id":"American","value":{"Carvel",8}}
我正在尝试以下代码,但它没有产生预期的结果
var mapFunction = function(){
emit(this.cuisine,[this.restaurant,this.grades[0].score]);
};
var reduceFunction = function(keys,values){
var ans;
var maxi=0;
for(var ele in values){
if(ele[1]>maxi){
maxi=ele[1]
ans=ele
}
}
return ans;
};
db.restaurant.mapReduce(mapFunction,reduceFunction,{out:"cuisine"})
最后的代码产生以下结果:
{ "_id" : "Afghan", "value" : null }
{ "_id" : "American", "value" : null }
我也尝试了其他方法,但它不起作用
解决方案
推荐阅读
- c - 为什么 x - x 在 c 语言的 putchar() 中什么都不是?
- firebase - Text search on firestore document field
- podio - 如何使用 PHP API 更新 Podio 类别
- ios - MapView annotation showing image and title
- laravel - required_unless & required_without_all Laravel 数组
- c++14 - 如何禁用实例化临时类?
- python - 将字符串的数据转换为列表的字符串
- single-sign-on - 无签名的 SSO Saml 协议绑定
- geometry - 如何在多边形(可能是凹多边形)中找到视点可以最边缘的多边形的视点?
- python - Tensorflow 的 Eager 模式下的性能测量