SELECT SUM(cores) from machines
WHERE idc='AMS' AND cluster='1' AND type='Physical';
[
{
"_id" : "55d5dc40281077b6d8af1bfa",
"hostname" : "x",
"domain" : "domain",
"description" : "VMWare ESXi 5",
"cluster" : "1",
"type" : "Physical",
"os" : "EXSi",
"idc" : "AMS",
"environment" : "DR",
"deviceclass" : "host",
"cores" : "64",
"memory" : "256",
"mounts" : [ ],
"roles" : [
"ESX-HOST"
],
"ipset" : {
"backnet" : "1"
},
"frontnet" : [ ],
"created" : "2015-09-08T07:35:03.343Z"
},
{
"_id" : "55d5dc40281077b6d8af1bfb",
"hostname" : "x",
"domain" : "domain",
"description" : "VMWare ESXi 5",
"cluster" : "1",
"type" : "Physical",
"os" : "EXSi",
"idc" : "AMS",
"environment" : "DR",
"deviceclass" : "host",
"cores" : "64",
"memory" : "256",
"mounts" : [ ],
"roles" : [
"ESX-HOST"
],
"ipset" : {
"backnet" : "1"
},
"frontnet" : [ ],
"created" : "2015-09-08T07:35:03.346Z"
}
]
首先,您需要更新文档,因为cores
值是字符串而不是数字。为此,我们使用“批量”操作。
var bulk = db.machines.initializeOrderedBulkOp(),
count = 0;
db.machines.find({ "cores": { "$type": 2 }}).forEach(function(doc){
var cores = parseInt(doc.cores);
bulk.find({ "_id": doc._id }).update({
"$set": { "cores": cores } })
count++;
if (count % 200 == 0){
// execute per 200 operations and re-init
bulk.execute();
bulk = db.machines.initializeOrderedBulkOp();
}
})
// clean up queues
if (count % 200 != 0)
bulk.execute();
然后,使用聚合框架,我们可以得到内核的总和
。首先,我们需要使用$match
运算符过滤文档,在$group
阶段,我们使用$sum
运算符获取核心
值的总和。
db.machines.aggregate([
{ "$match": { "idc": "AMS", "cluster": "1", "type": "Physical" }},
{ "$group": { "_id": null, "sum_cores": { "$sum": "$cores" }}}
])
返回:
{ "_id" : null, "sum_cores" : 128 }
并给我带来这些结果: {“_id”:{“name”:“city1”},“count”:212} {“_id”:{“name”:“city2”},“count”:1200} https://hexdocs.pm/mongodb/readme.html#贡献 提前谢了。
本文向大家介绍MongoDB聚合和投影,包括了MongoDB聚合和投影的使用技巧和注意事项,需要的朋友参考一下 为此,请使用$project和aggregate()。聚合中的$project将带有请求字段的文档传递到管道的下一个阶段。 让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是对MongoDB聚合和投影的查询- 这将产生以下输出-
我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。
主要内容:aggregate() 方法,管道MongoDB 中的聚合操作用来处理数据并返回计算结果,聚合操作可以将多个文档中的值组合在一起,并可对数据执行各种操作,以返回单个结果,有点类似于 SQL 语句中的 count(*)、group by 等。 aggregate() 方法 您可以使用 MongoDB 中的 aggregate() 方法来执行聚合操作,其语法格式如下: db.collection_name.aggregate(aggr
我有一种情况,我需要根据一个数组值执行一个group by操作,该数组值将字段值的出现次数相加。然后对计数进行过滤,并准备结果,以便根据条件显示结果。从本质上讲,文档被转换回如果您只使用find函数就会呈现的方式。由于matchedDocuments数组中收集的项的数量,我遇到了临时文档太大的问题。任何关于如何改进这一点的建议都将是有益的。 以下是一些示例文档和基于上述标准的预期结果:
我想在带有条件的集合列表中获得多个字段。我尝试了一个聚合请求,但我有一个错误。 我的请求 我的Json: 例如,我想在result中获得这个json: