我正在使用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这个没有结果,有没有人有这样的经验?感谢。
答案 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);