Mongodb $cond运算符java代码

Mongodb $cond运算符java代码,mongodb,mongodb-java,aggregation-framework,Mongodb,Mongodb Java,Aggregation Framework,我有一个聚合查询,如下所示: db.TWITTER_DATA_Processed.aggregate( {$match : { SpId : 840, Scheduler_id : "SCH_01" }},{$group : {_id : {SpId : "$SpId", Scheduler_id : "$Scheduler_id",Country : "$Country"}, positive_count : { $sum: { $cond: [ { $gt: [ "$Sentiment",

我有一个聚合查询,如下所示:

db.TWITTER_DATA_Processed.aggregate( {$match : { SpId : 840, Scheduler_id : "SCH_01" }},{$group : {_id : {SpId : "$SpId", Scheduler_id : "$Scheduler_id",Country : "$Country"}, positive_count :  { $sum: { $cond: [ { $gt: [ "$Sentiment", 0 ] } , 1, 0 ] } }, neutral_count :  { $sum: { $cond: [ { $eq: [ "$Sentiment", 0 ] } , 1, 0 ] } }, negative_count :  { $sum: { $cond: [ { $lt: [ "$Sentiment", 0 ] } , 1, 0 ] } }}})
DBObject positiveSentiment = new BasicDBObject("$Sentiment", new BasicDBObject("$gt", 0));
样本输出:

 {
         "_id" : {
                 "SpId" : 840,
                 "Scheduler_id" : "SCH_01",
                 "Country" : "Argentina"
         },
         "positive_count" : 1,
         "neutral_count" : 2,
         "negative_count" : 0
 },
 {
         "_id" : {
                 "SpId" : 840,
                 "Scheduler_id" : "SCH_01",
                 "Country" : "United Kingdom"
         },
         "positive_count" : 17,
         "neutral_count" : 4,
         "negative_count" : 1
 }
由于$cond操作符的存在,我在为相同的代码编写java代码时遇到了困难。根据现有线程,我假设$gt必须按如下方式编写:

db.TWITTER_DATA_Processed.aggregate( {$match : { SpId : 840, Scheduler_id : "SCH_01" }},{$group : {_id : {SpId : "$SpId", Scheduler_id : "$Scheduler_id",Country : "$Country"}, positive_count :  { $sum: { $cond: [ { $gt: [ "$Sentiment", 0 ] } , 1, 0 ] } }, neutral_count :  { $sum: { $cond: [ { $eq: [ "$Sentiment", 0 ] } , 1, 0 ] } }, negative_count :  { $sum: { $cond: [ { $lt: [ "$Sentiment", 0 ] } , 1, 0 ] } }}})
DBObject positiveSentiment = new BasicDBObject("$Sentiment", new BasicDBObject("$gt", 0));
关于$cond,我唯一能想到的是它需要一个操作数数组(在我的实验中,我得到了以下错误:

"errmsg" : "exception: the $cond operator requires an array of 3 operands" , "code" : 16019
但我如何适应

[{$gt:[“$touction”,0]},1,0]

在Java代码中

添加最终工作代码,以备将来有人需要参考:

DBObject groupIdKeys = new BasicDBObject("SpId", "$SpId");
        groupIdKeys.put("Scheduler_id", "$Scheduler_id");
        groupIdKeys.put("Country", "$Country");

        /* positive sentiments */
        List<Object> gtOperands = new ArrayList<Object>();
        gtOperands.add("$Sentiment");
        gtOperands.add(0);

        List<Object> positiveCondOperands = new ArrayList<Object>();
        positiveCondOperands.add(new BasicDBObject("$gt", gtOperands));
        positiveCondOperands.add(1);
        positiveCondOperands.add(0);
        BasicDBObject finalPositiveCond = new BasicDBObject("$cond",
                positiveCondOperands);

        DBObject sumOfPositiveCount = new BasicDBObject("$sum",
                finalPositiveCond);

        /* neutral sentiments */
        List<Object> eqOperands = new ArrayList<Object>();
        eqOperands.add("$Sentiment");
        eqOperands.add(0);

        List<Object> neutralCondOperands = new ArrayList<Object>();
        neutralCondOperands.add(new BasicDBObject("$eq", eqOperands));
        neutralCondOperands.add(1);
        neutralCondOperands.add(0);
        BasicDBObject finalNeutralCond = new BasicDBObject("$cond",
                neutralCondOperands);

        DBObject sumOfNeutralCount = new BasicDBObject("$sum", finalNeutralCond);

        /* negative sentiments */
        List<Object> ltOperands = new ArrayList<Object>();
        ltOperands.add("$Sentiment");
        ltOperands.add(0);

        List<Object> negativeCondOperands = new ArrayList<Object>();
        negativeCondOperands.add(new BasicDBObject("$lt", ltOperands));
        negativeCondOperands.add(1);
        negativeCondOperands.add(0);
        BasicDBObject finalNegativeCond = new BasicDBObject("$cond",
                negativeCondOperands);

        DBObject sumOfNegativeCount = new BasicDBObject("$sum",
                finalNegativeCond);

        DBObject groupKeys = new BasicDBObject("_id", groupIdKeys);
        groupKeys.put("positive_count", sumOfPositiveCount);
        groupKeys.put("neutral_count", sumOfNeutralCount);
        groupKeys.put("negative_count", sumOfNegativeCount);

        DBObject group = new BasicDBObject("$group", groupKeys);

        AggregationOutput output = dbCollection.aggregate(firstOp, group);

        Iterable<DBObject> results = output.results();

        for (DBObject result : results) {
            System.out.println(result);
        }
dbobjectgroupidkeys=newBasicDBObject(“SpId”,“$SpId”);
groupIdKeys.put(“调度器id”,“$Scheduler\u id”);
groupIdKeys.put(“国家”,“美元国家”);
/*积极情绪*/
List gtoperans=new ArrayList();
GTO操作数。添加(“$s”);
GTO操作数相加(0);
List positiveCondOperands=new ArrayList();
add(新的BasicDBObject(“$gt”,gtoperans));
正数和正数。添加(1);
正数与正数相加(0);
BasicDBObject finalPositiveCond=新的BasicDBObject($cond),
阳性对照组;
DBObject sumOfPositiveCount=新的BasicDBObject(“$sum”,
最后正秒);
/*中立情绪*/
列表eqOperands=new ArrayList();
eqOperands.添加(“$”);
eqOperands.add(0);
List neutralCondOperands=new ArrayList();
添加(新的BasicDBObject(“$eq”,eqOperands));
添加(1);
添加(0);
BasicDBObject finalNeutralCond=新的BasicDBObject($cond),
中性内酰胺);
DBObject sumOfNeutralCount=新的BasicDBObject($sum),finalNeutralCond);
/*消极情绪*/
List ltOperands=new ArrayList();
ltOperands.加上(“$”);
ltOperands.add(0);
List negativeCondOperands=new ArrayList();
negativencdoperands.add(新的基本对象($lt),ltOperands));
负数副词。添加(1);
负数为零;
BasicDBObject finalNegativeCond=新的BasicDBObject($cond),
否定词);
DBObject sumOfNegativeCount=新的BasicDBObject(“$sum”,
最后负秒);
DBObject groupKeys=新的BasicDBObject(“\u id”,groupIdKeys);
groupKeys.put(“正计数”,正计数之和);
groupKeys.put(“中性计数”,中性计数的总和);
groupKeys.put(“负计数”,sumOfNegativeCount);
DBObject group=新的基本对象(“$group”,groupkey);
AggregationOutput输出=dbCollection.aggregate(firstOp,group);
Iterable results=output.results();
for(数据库对象结果:结果){
系统输出打印项次(结果);
}
下面的示例中,您可以像这样为“$cond”操作符创建数组:

ArrayList gtA = new ArrayList();
gtA.add("$Sentiment");
gtA.add(0);
ArrayList condArray = new ArrayList();
condArray.add(new BasicDBObject("$gt", gtA));
condArray.add(1);
condArray.add(0);
BasicDBObject fullCond = new BasicDBObject("$cond", condArray);

你需要创建一个ArrayList:see here编辑了原始问题以包含最终工作代码,再次感谢!见鬼,我花了1/2个小时创建了一个列表,但在gtA上游手好闲。添加(“$touction”)概念,得到一个错误。非常感谢!!!