【问题标题】:mongodb (java) including id field by namemongodb (java) 按名称包括 id 字段
【发布时间】:2013-01-25 05:14:44
【问题描述】:

我正在关注 java 中的 mongo db 聚合,示例显示了下面的管道。我要做的是添加一个名为department 的附加字段,其中包含部门值(因此在这种情况下,_id 字段将具有相同的值。我尝试在groupFields 中添加另一个字段new BasicDBObject("department",$department),但是没有用。

// create our pipeline operations, first with the $match
DBObject match = new BasicDBObject("$match", new BasicDBObject("type", "airfare") );

// build the $projection operation
DBObject fields = new BasicDBObject("department", 1);
fields.put("amount", 1);
fields.put("_id", 0);
DBObject project = new BasicDBObject("$project", fields );

// Now the $group operation
DBObject groupFields = new BasicDBObject( "_id", "$department");
groupFields.put("average", new BasicDBObject( "$avg", "$amount"));
DBObject group = new BasicDBObject("$group", groupFields);

// run aggregation
AggregationOutput output = collection.aggregate( match, project, group );

输出为

{"_id" : "Human Resources" , "average" : 74.91735537190083} , 
{"_id" : "Sales" , "average" : 72.30275229357798} ,
{"_id" : "Engineering" , "average" : 74.1}

【问题讨论】:

  • 嗨,这篇文章很有用,我有点想知道如何解析输出结果?在这种情况下,您如何将结果转换为 POJO?如果我使用 while( ...iterator.hasnext()) 它进入一个无限循环 ...
  • 你为什么不在另一个问题中发布你的代码,我们可以帮助找到问题
  • 幸运的是我用'for each'循环解决了这个问题('while'有一些问题),非常感谢你的建议。

标签: java mongodb grouping projection


【解决方案1】:

尝试切换顺序:

AggregationOutput output = collection.aggregate( match, group, project);

或者您可以在组之后添加另一个项目。如果您在$group 之前使用$project,它只是将值传递给组运算符,而不是直接传递给输出。

【讨论】:

  • 在原来的情况下,它甚至不像之前的项目在做任何事情
  • 投影有效,但我的 _id 字段实际上是复合 id _id:{a:"v1",b:"v2"},我希望将 ab 作为输出中的单独字段,而不是分组为_id。是否可以像这样展开 id 字段?
  • 没关系,我想通了。事后进行投影是正确的方法。
猜你喜欢
  • 1970-01-01
  • 2018-05-24
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多