使用MongoDB java驱动程序进行聚合

时间:2016-11-21 06:53:31

标签: java mongodb

我正在使用MongoDB java驱动程序3.2.2进行一些聚合操作,但我不确定是否可以通过它实现某些功能。

MongoDB中的原始查询是:

db.getCollection('report').aggregate({
$group: {
    _id: "$company_id",
    count: {
            $sum: {
                    $cond: [{
                            $eq: ["$idcard.status", "normal"]
                        },0,1]
                }
            }
    }
})

我不知道如何在下面的代码部分中将“$ cond”作为“$ sum”运算符的参数放在Java驱动程序中:

        AggregateIterable<Document> res = col.aggregate(Arrays.asList(
            group("$company_id",
                    sum("count", ...)
            )));

我搜索了official document这个没有结果,有没有人有这样的经验?感谢。

2 个答案:

答案 0 :(得分:1)

对于3.x驱动程序

使用BsonDocument:输入安全版本

BsonArray cond = new BsonArray();
BsonArray eq = new BsonArray();
eq.add(new BsonString("$idcard.status"));
eq.add(new BsonString("normal"));
cond.add(new BsonDocument("$eq", eq));
cond.add(new BsonInt64(0));
cond.add(new BsonInt64(1));

AggregateIterable<BsonDocument> aggregate = dbCollection.aggregate(Arrays.asList(
        group("$company_id",
                sum("count", new BsonDocument("$cond", cond))
    )));

使用文档 - 更少代码但不安全

List cond = new ArrayList();
cond.add(new Document("$eq", Arrays.asList("$idcard.status", "normal")));
cond.add(0);
cond.add(1);

AggregateIterable<Document> aggregate = dbCollection.aggregate(Arrays.asList(
        group("$company_id",
                sum("count", new Document("$cond", cond))
        )));

答案 1 :(得分:0)

在Java中使用$ cond使用ArrayList。

{ $cond: [ { $eq: ["$idcard.status", "normal"] },0,1]

//要实现这一点 - [“$ idcard.status”,“正常”]

ArrayList eqArrayList = new ArrayList();
eqArrayList.add("$idcard.status");
eqArrayList.add("normal");

//实现这一点 - [{$ eq:[“$ idcard.status”,“normal”]},1,0]

 ArrayList condArray = new ArrayList();
 condArray.add(new BasicDBObject("$eq", eqArrayList));
 condArray.add(1);
 condArray.add(0);

//最后 - {$ cond:[{$ eq:[“$ idcard.status”,“normal”]},1,0]}

BasicDBObject fullCond = new BasicDBObject("$cond", condArray);

另见:MongoDB aggregation condition translated to JAVA driver