gpt4 book ai didi

mongodb - 查找集合中字段(如果存在)的总和

转载 作者:可可西里 更新时间:2023-11-01 10:44:33 25 4
gpt4 key购买 nike

我有如下的mongodb结构

{
"_id": ObjectId("507c80a143188f9610000003"),
"date": ISODate("2012-10-15T21: 31: 13.0Z"),
"uid": NumberInt(35920),
"comp": NumberInt(770),
"fields": {
"rating": {
"parent": "rating",
"weight": NumberInt(2),
"rel_weight": 0.11,
},
"capacity": {
"parent": "capacity",
"weight": NumberInt(4),
"rel_weight": 0.89,
},
}
}

“fields”属性中有 2 个字段“rating”和“capacity”。但是,每个条目可能有一组不同的字段。例如。尺寸、价格等

我想找到所有在“字段”下有“评级”的条目,并获得所有这些条目的“权重”属性的总和。

我是 mongodb 的新手,我尝试使用 mapReduce 函数,但没有用。

下面是我使用的代码。请让我知道我哪里出错了,或者是否有更好的解决方案来代替这段代码。

function map(){
emit(this._id,{weight:this.fields.rating.weight});
}


function reduce(key,value){
var sum = 0;
for ( var i=0; i<value.length; i++ ) {
sum += value[i].amount;
}
return sum;
}


res = db.collection_name.mapReduce(map, reduce, { query: {"fields.rating" : { $exists: true } });

最佳答案

我终于能够弄清楚并让它工作。我在下面分享了我的代码。

var map = function(){
if(this.fields.rating){
emit(this.fields.rating.parent,this.fields.rating.weight);
}
}

var reduce = function (k, vals) {
var sum = 0;
var count = 0;
for (var i in vals) {
sum += vals[i];
count++;
}
var avg = (sum/count);
return avg;
}

var res = db.myCollection.mapReduce(map, reduce, {out:"myoutput"});

关于mongodb - 查找集合中字段(如果存在)的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12906600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com