[英]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.