gpt4 book ai didi

java - 在java中创建动态组查询

转载 作者:行者123 更新时间:2023-12-02 11:41:06 34 4
gpt4 key购买 nike

我有以下数据库:

  { stream :{ "name": "name1",
"error1": 1,
"error2": 1,
"error3": 1 }
}

,

{ stream : {"name": "name1",
"error1": 2,
"error2": 1,
"error3": 1 }
}

,
{ stream : {"name": "name2",
"error1": 1,
"error2": 1,
"error3": 1 }
}

每次出现不同的错误组合时,我想按名称和总和对其进行分组。

这是我在 mongo 中所做的,我需要在 java 中动态创建以下查询

 db.collection.aggregate([{$group: {_id: "$stream.name",error1: {$sum:"$stream.error1"   },error2: {$sum: "$stream.error2" }}  ]) 

问题是,每次我都需要错误的不同组合:错误1和错误2,只有错误1等等。

这就是我所做的:(“if”中的参数是我得到的一些 boolean 值)

  List<String>  totalError = new ArrayList<String>();   
BasicDBObject group = new BasicDBObject( "$group", new BasicDBObject("_id","$stream.name" ));


if (error1)
{

group.append("error1",new BasicDBObject ("$sum", "$stream.error1" ));

}

if (error2)
{
group.append("error2",new BasicDBObject ("$sum", "$stream.error2" ));

}

if (error3)
{
group.append("error3",new BasicDBObject ("$sum", "$stream.error3" ));

}

问题是我得到:

    { "$group" : { "_id" : "$stream.name"} , "error1" : { "$sum: "$stream.error1"} , "error2" : { "$sum" : "$stream.error2"}

},

而不是:

      { "$group" : { "_id" : "$stream.name", "error1" : { "$sum: "$stream.error1"} , "error2" : { "$sum" : "$stream.error2"}}

如果我知道我需要什么错误组合,我可以在组 dbobject 的构造函数中使用追加。但我不知道组合,我需要使用“ifs”

最佳答案

尝试

BasicDBObject fields = new BasicDBObject("_id","$stream.name" );
if (error1)
fields.append("error1",new BasicDBObject ("$sum","$stream.error1"));
if (error2)
fields.append("error2",new BasicDBObject ("$sum","$stream.error2"));
if (error3)
fields.append("error3",new BasicDBObject ("$sum","$stream.error3"));
BasicDBObject group = new BasicDBObject( "$group", fields);

您应该尽可能使用辅助函数。

List<BsonField> fieldAccumulators = new ArrayList<>();
if (error1)
fieldAccumulators.add(Accumulators.sum("error1","$stream.error1"));
if (error2)
fieldAccumulators.add(Accumulators.sum("error2","$stream.error2"));
if (error3)
fieldAccumulators.add(Accumulators.sum("error3","$stream.error3"));
collection.aggregate(Arrays.asList(Aggregates.group("$stream.name", fieldAccumulators)));

关于java - 在java中创建动态组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48541506/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com