簡體   English   中英

使用MongoDB Java驅動程序進行聚合

[英]Aggregation using MongoDB java driver

我正在使用MongoDB Java驅動程序3.2.2進行一些聚合操作,但是我不確定是否可以通過它實現某些目標。

MongoDB中的原始查詢是:

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

我不知道如何在下面的代碼部分中將“ $ cond”作為Java驅動程序中“ $ sum”運算符的參數:

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

我已經搜索了與此相關的正式文檔 ,沒有人有這樣做的經驗嗎? 謝謝。

對於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))
        )));

要在Java中使用$ cond,請使用ArrayList。

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

//為了達到這個目的-[“ $ idcard.status,” normal“]

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聚合條件轉換為JAVA驅動程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM