如何使用java从mongo集合中求和的值?

时间:2014-07-03 05:20:53

标签: java mongodb aggregation-framework

我正在使用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));

1 个答案:

答案 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,了解您可能熟悉的内容以及如何实施这些内容的基本概述。

另见Aggregation Framework and the Java Driver