私は次の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」属性には、「rating」と「capacity」の 2 つのフィールドがあります。ただし、各エントリには異なるフィールド セットがある場合があります。例えば。寸法、価格など
「フィールド」の下に「評価」があるすべてのエントリを検索し、そのようなすべてのエントリの「重み」属性の合計を取得したいと思います。
私は 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 } });