我正在努力在Spring Data MongoDB中翻译此mongoDB查询:
db.applicates.aggregate(
[
{
"$match": {
"claimantCategory": 1
}
},
{
$group : {
_id : { month: { $month: "$claimDate" }, day: { $dayOfMonth: "$claimDate" }, year: { $year: "$claimDate" } },
count: { $sum: 1 }
}
}
]
)
我已经尝试过了:
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);
但是它失败并发生以下异常:无法从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;
....
}
我找到了答案!如@chridam所建议,您需要替换该行
.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"));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句