2015-11-23 235 views
0

我和翻译在Spring数据的MongoDB MongoDB的这种挣扎查询:春数据MongoDB的聚集查询

db.applicates.aggregate(
    [ 
    { 
     "$match": { 
     "claimantCategory": 1 
     } 
    }, 
     { 
     $group : { 
      _id : { month: { $month: "$claimDate" }, day: { $dayOfMonth: "$claimDate" }, year: { $year: "$claimDate" } }, 
     count: { $sum: 1 } 
    } 
    } 
    ] 
) 

我tryed这一点:

TypedAggregation<Applicate> aggregation = newAggregation(Applicate.class, 
      match(Criteria.where("claimantCategory").is(claimantCategory)), 
      project("claimDate") 
        .andExpression("dayOfMonth("+"\""+"claimDate"+"\""+")").as("day") 
        .andExpression("month(claimDate)").as("month") 
        .andExpression("year(claimDate)").as("year"), 
      group(fields().and("day").and("month").and("year")) 
        .count().as("count")); 
AggregationResults<ClaimsAggregator> groupResults = mongoOperations.aggregate(aggregation, ClaimsAggregator.class); 

但它失败例外:可以“T从BSON String类型转换为Date

我Applicate.class:

public class Applicate { 

@Id 
private String id; 

private int claimId; 

@DateTimeFormat (iso = DateTimeFormat.ISO.DATE) 
private Date claimDate; 

private int codeOfForm; 
private String claimStatus; 
private String fio; 
private int claimantCategory; 
private int serviceCode; 
private String subserviceName; 
private String departmentName; 
//getter,setters, constructor 
} 

ClaimsAggregator.class:

public class ClaimsAggregator { 
private String claimDate; 
private int count; 
.... 
} 
+0

替换行'.andExpression( “请将dayOfMonth(” + “\” “+” claimDate “+” \ “” + “)”)。作为( “日”)'与此'.andExpression( “请将dayOfMonth(claimDate)”)。如( “天”)'。 – chridam

+0

@chridam,谢谢你的建议。刚刚测试过,现在它在日期字段中返回null。什么可能导致? – MoOFueL

+0

不太确定,可能是某些没有'claimDate'字段的文档? – chridam

回答

0

我找到一个答案! 为@chridam建议,u需要与此

.andExpression("dayOfMonth(claimDate)").as("day") 

现在,你需要添加更换线

.andExpression("dayOfMonth("+"\""+"claimDate"+"\""+")").as("day") 

.first("claimDate").as("claimDate") 

排队

group(fields().and("day").and("month").and("year")) 

决赛代码:

TypedAggregation<Applicate> aggregation = newAggregation(Applicate.class, 
      match(Criteria.where("claimantCategory").is(claimantCategory)), 
      project("claimDate") 
        .andExpression("dayOfMonth(claimDate)").as("day") 
        .andExpression("month(claimDate)").as("month") 
        .andExpression("year(claimDate)").as("year"), 
      group(fields().and("day").and("month").and("year")).first("claimDate").as("claimDate") 
        .count().as("count"));