首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将带有相应第一个运算符的泛型字段列表传递给Aggregation.group方法

如何将带有相应第一个运算符的泛型字段列表传递给Aggregation.group方法
EN

Stack Overflow用户
提问于 2017-07-12 21:12:07
回答 1查看 289关注 0票数 0

我想使用mongoTempalte和Aggregation.group()方法编写一个用于聚合的泛型代码。因此,我遇到了使用first()运算符将泛型字段传递给group方法的问题

以下是我的演示原生查询:

代码语言:javascript
运行
复制
    db.subscriberProfile.aggregate([{"$unwind":"$usage_history"},
{ "$group" : { "_id" :"$_id" ,"birthdate" : { "$first":"$birthdate"} , "category" : { "$first":"$category"} , "control_group" : { "$first":"$control_group"}  , "sumOfTotalUsage" : { "$sum" :{"$cond": [ { "$gte" :[ "$usage_history.date" ,   ISODate( "2017-01-13T10:43:55.306Z")] }, "$usage_history.total_usage", 0]}}}},
 { "$match" : { "$and" : [ { "birthdate" : { "$lte" :  ISODate( "2017-07-12T10:43:55.306Z")}} , { "birthdate" : { "$gte" :  ISODate( "1917-07-12T10:20:35.306Z")}} , { "category" : { "$in" : [ "Prepaid"]}} , { "control_group" : false} , { "sumOfTotalUsage" : { "$gte" : 0}}]}}])

下面是我用Java编写的示例代码。

代码语言:javascript
运行
复制
UnwindOperation unwind = Aggregation.unwind("usage_history");
GroupOperation group = Aggregation.group(fields.toArray(new String[fields.size()])).sum("usage_history.total_usage").as("sumOfTotalUsage");

我只想知道如何使用$first运算符在组操作中添加多个字段。那么,有没有办法把字段列表和第一个运算符的列表传递给group方法呢?谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-13 19:23:20

试试这段代码,希望能对你有所帮助。

代码语言:javascript
运行
复制
UnwindOperation unwind = Aggregation.unwind("usage_history");

  BasicDBObject object = new BasicDBObject("_id", "$_id");

  for (String string : fields) {

   object.append(string, new BasicDBObject("$first", "$" + string));
  }

  object.append("total", new BasicDBObject("$sum", new BasicDBObject("$cond",
    new Object[] { new BasicDBObject("$gte", new Object[] { "$usage_history.date", calendarMin.getTime() }),
      "$usage_history.total_usage", 0 })));

  BasicDBObject groupObject = new BasicDBObject("$group", object);
  DBObject groupOperation = (DBObject) groupObject;

  MatchOperation matchMain = Aggregation
    .match(new Criteria().andOperator(criteriaList.toArray(new Criteria[criteriaList.size()])));

  Aggregation aggregation = Aggregation.newAggregation(unwind, new CustomGroupOperation(groupOperation),
    matchMain);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45058657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档