【发布时间】:2015-12-17 19:44:20
【问题描述】:
我是 Mongodb 和 spring-data 的新手,我参考了这个 stackoverflow 链接 grouping quarterly wise 和这个链接 using $cond operator in spring data 并在下面构建了这个代码 sn-p,用于在 mongodb 中检索季度销售报告:
String pipeline = "{$project:{_id:1,'unitsSold':1,'dateSold':1,'results': 1 ,
'productName': 1, 'year':{$year:['$dateSold']}, "+
"'quarter':{$cond:[{$lte:[{$month:'$dateSold'},3]},"+
"'first'," +
"{$cond:[{$lte:[{$month:'$dateSold'},6]},"+
"'second',"+
"{$cond:[{$lte[{$month:'$dateSold'},9]},"+"'third',"+
"'fourth']}]}]}}},"+
"{$group:{'_id':{ 'year':'$year', 'quarter':'$quarter'},
'unitsSold': { $sum: '$unitsSold' },'results':{$push:'$$ROOT'}}}";
DBObject operation = (DBObject)JSON.parse (pipeline);
TypedAggregation<SampleReport> aggregation =newAggregation(SampleReport.class,
new DBObjectAggregationOperation(operation)
);
AggregationResults<SampleReport> result =mongoTemplate.aggregate(aggregation, SampleReport.class);
List<SampleReport> list = result.getMappedResults();
for(SampleReport r : list)
{
System.out.println (r.getProductName() + " : " + r.getUnitsSold() + " : " + r.getQuarter() +":: "+r.getYear());
}
问题不在于总结已售出的单位。请让我知道我的弹簧数据哪里出错了。但是这个查询使用 robomongo 获得了所需的结果。
问候
克里斯
【问题讨论】:
标签: java mongodb mongodb-query aggregation-framework spring-data-mongodb