2013-02-05 72 views
1

我一直在考虑使用Node和MongoDb作为Android应用程序的评分系统,到目前为止我已经实现了创建,更新和删除罚款,但是我很遗憾当我想从数据库中获取平均评分时,请这样做。下面是数据结构时我给了决定:Node.JS + MongoDB汇总框架的平均值

[ 
    { 
    "_id": "1", 
    "ratings": [ 
     { 
     "value": "5", 
     "user": "CoolUser1" 
     }, 
     { 
     "value": "4", 
     "user": "CoolUser2" 
     } 
    ] 
    }, 
    { 
    "_id": "2", 
    "ratings": [ 
     { 
     "value": "4", 
     "user": "CoolUser3" 
     }, 
     { 
     "value": "2", 
     "user": "CoolUser4" 
     } 
    ] 
    } 
] 

基本上我需要的是在一个给定_id收视率的平均值。

这里是更新方法,我用给我怎么也设置MongoDB的连接感:

exports.updateRating = function(req, res) { 
    var id = req.params.id; 
    var rating = req.body; 
    console.log('Updating a rating: ' + id); 
    console.log(JSON.stringify(rating)); 
     ratings.update({'_id': id}, 
         {$push: rating}, 
         {upsert:true}, 
         function(err, result) { 
          if (err) { 
           console.log('Error updating rating: ' + err); 
           res.send({'error':'An error has occurred'}); 
          } else { 
           console.log('' + result + ' document(s) updated'); 
           res.send(rating); 
          } 
         } 
     ); 
} 

回答

9

它是至关重要的存储ratings.value作为一个字符串?

这是可行的,但是只有当你转换rating前安全

ratings.aggregate([ 
    { $match: { _id: id } }, 
    { $unwind: '$ratings' }, 
    { $group: { _id: null, avg: { $avg: '$ratings.value' } } } 
], function(err, result) { 
    console.log(result); 
    db.close(); 
}); 
+0

想想你到数值,完美的作品时,我存储的收视率作为数量 –