如何使用java对mongo集合中的值求和?
我正在使用java和mongoDB 在包含4个文档的mongo集合中,我有如下数据如何使用java对mongo集合中的值求和?,java,mongodb,aggregation-framework,Java,Mongodb,Aggregation Framework,我正在使用java和mongoDB 在包含4个文档的mongo集合中,我有如下数据 _id, name, key1, key2, status 我想使用java查询该集合,该集合返回所有四个文档的“key1”之和,其中状态为1 如何编写查询以获取键1的和 以下是我的解决方法: BasicDBObject match = new BasicDBObject(); match.put("status", 1); pipeline.add(new BasicDBObject
_id, name, key1, key2, status
我想使用java查询该集合,该集合返回所有四个文档的“key1”之和,其中状态为1
如何编写查询以获取键1的和
以下是我的解决方法:
BasicDBObject match = new BasicDBObject();
match.put("status", 1);
pipeline.add(new BasicDBObject("$match",match));
pipeline.add(new BasicDBObject("$group",new BasicDBObject("_id", null).append(
"total", new BasicDBObject( "$sum", "$totInOutOctets" ))));
cmdBody.put("pipeline", pipeline);
// Put db command for execution in json array
networkCapacityTrending.put(db.command(cmdBody));
MongoDB确实有一个可以使用的.group方法,但实际上这更像是mapReduce方法的包装器,更好的现代方法是使用
甚至在不首先匹配文档的情况下:
db.collection.agregate([
{ "$group": {
"_id": null,
"total": {
"$sum": {
"$cond": [
{ "$eq": [ "$status", 1 ] },
"$key1"
0,
]
}
}
}}
])
对于Java驱动程序,您实际上只是在构造DBObject类型。通过解析一些简单的东西,如所示的JSON,或者通过编程:
BasicDBObject match = new BasicDBObject(
"$match", new BasicDBObject("status", 1)
);
BasicDBObject group = new BasicDBObject(
"$group", new BasicDBObject("_id", null).append(
"total", new BasicDBObject( "$sum", "$key1" )
)
);
DBCollection collection = db.getCollection("mycollection");
AggregationOutput output = collection.aggregate(match,group);
请大致查看文档中的,以了解您可能熟悉的事物以及如何实现它们的基本概述
另请参见我从集合中获取了状态为1的所有数据,并通过迭代游标将key1添加到变量中以获取sum@user3322141您正在尝试使用db.command方法提交聚合管道文档。您需要集合上的.aggregate方法。答案中给出的代码非常清楚。为什么group语句中的_id为null???@user3322141它意味着将所有内容分组,而不是按字段的特定值分组。所以你要的是所有的文件。其他条件过滤状态。这些链接是为了帮助您,因为wellbut收集方法已被弃用,如果我以不同的方式使用相同的方法,它将以0@user3322141此处使用的集合是指从数据库中获取的集合的对象。aggregate是基于此的方法。实际上,这将在左侧返回一个result DBObject。在清单中澄清了这一点。同样,这些链接是用来指导你的新事物的。
BasicDBObject match = new BasicDBObject(
"$match", new BasicDBObject("status", 1)
);
BasicDBObject group = new BasicDBObject(
"$group", new BasicDBObject("_id", null).append(
"total", new BasicDBObject( "$sum", "$key1" )
)
);
DBCollection collection = db.getCollection("mycollection");
AggregationOutput output = collection.aggregate(match,group);