我在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
我看了一下聚合但是我只使用一个系列所以我不认为这适合我?任何帮助表示赞赏。
答案 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);
});