从同一个mongoose集合中添加特定值 - 节点js

时间:2016-07-12 08:28:09

标签: javascript node.js mongodb mongoose

我在mongoose中创建了一个如下所示的集合:

 db.myservers.find()
{ "_id" : ObjectId("5783a416c9"), "text_usage" : "15", "name" : "A1", "__v" : 0 }
{ "_id" : ObjectId("57831216c9"), "text_usage" : "220", "name" : "A2", "__v" : 0 }
{ "_id" : ObjectId("5783a41asd"), "text_usage" : "100", "name" : "A3", "__v" : 0 }

我的架构工作是这样的:

var serverSchema = new Schema({
    name: String,
    text_usage: String
  })
var myServer = mongoose.model('MyServer', serverchema)

我想将text_usage中的所有值一起添加并除以此列表中的对象数 - 所以基本上找到一个平均值。但是,我的text_usage需要存储为一个String,因为它来自API调用,所以在将值一起添加之前我是否需要parseString?

所以最后的结果我想要的是这样的:

var totalTextCount = 335;
var objectCount = 3;
var average = 111.66

我看了一下聚合但是我只使用一个系列所以我不认为这适合我?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

首先得到总数如下

Model =db.model('ServerList', serverSchema);        
var userCount = serverModel.count('name');

然后迭代所有记录以找到总数

   var total =0;
 serverModel.find(function (err, servers) {
  if (err) return console.error(err);
       servers.forEach(function(server){
       total += parseInt(server.text_usage);
       });
 })

答案 1 :(得分:0)

聚合无法更改现有数据类型,因此在这种情况下,您应该使用查找并迭代所有数据来获取总数,计数和平均值。像:

var totalTextCount = 0, average = 0, objectCount = 0;

MyServer.find().lean().exec(function(err, datas) {
  datas.forEach(function(data) {
    totalTextCount += parseInt(data.text_usage);
    objectCount+= 1;
  }); 

  average = totalTextCount / objectCount;
  console.log(totalTextCount, objectCount, average);
});