我正在使用java和mongoDB。
在内容4文件的mongo集合中,我有像
这样的数据_id, name, key1, key2, status
我想使用java查询该集合,它返回状态为1的所有四个文档的“key1”的总和。
如何编写查询以获取key1 ???的总和
以下是我的解决方法:
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));
答案 0 :(得分:0)
MongoDB确实有一个.group()
方法可以使用,但实际上这更像是" mapReduce"方法和更好的现代方法是使用aggregation framework
db.collection.aggregate([
{ "$match": {
"status": 1
}}
{ "$group": {
"_id": null,
"total": { "$sum": "$key1" }
}}
])
甚至没有"匹配"首先是文件:
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);
全面了解文档中的Aggregation to SQL mapping chart,了解您可能熟悉的内容以及如何实施这些内容的基本概述。