我是在Mongo DB + Spring中编写聚合查询的新手
方案::我们正在将birthDate(Jjava.uti.Date)存储在已存储为ISO日期的mongo db中。现在,我们尝试查找仅与dayOfMonth和Month匹配的记录。这样我们就可以从列表中选择相应的对象。
我经历了几种解决方案,这是我正在尝试的方法,但这给了我一组空的记录。
Aggregation agg = Aggregation.newAggregation(
Aggregation.project().andExpression("dayOfMonth(birthDate)").as("day").andExpression("month(birthDate)")
.as("month"),
Aggregation.group("day", "month"));
AggregationResults<Employee> groupResults = mongoTemplate.aggregate(agg, Employee.class, Employee.class);
我还尝试在Criteria的帮助下应用查询,但这也给了我一个Employee对象,该对象全部为空内容。
Aggregation agg = Aggregation.newAggregation(Aggregation.match(Criteria.where("birthDate").lte(new Date())), Aggregation.project().andExpression("dayOfMonth(birthDate)").as("day").andExpression("month(birthDate)")
.as("month"),
Aggregation.group("day", "month"));
AggregationResults<Employee> groupResults = mongoTemplate.aggregate(agg, Employee.class, Employee.class);
我必须错过一些重要的东西,这些东西给了我这些空数据。
其他信息:员工对象中仅包含birthDate(Date)和email(String)
答案 0 :(得分:0)
请尝试指定要包含在$project
阶段中的字段。
project("birthDate", "...").andExpression("...
默认情况下,_id字段包含在输出文档中。要将输入文档中的任何其他字段包括在输出文档中,必须在$ project中明确指定包含内容。
参见: MongoDBReference - $project (aggregation)
我创建了DATAMONGO-2200,以添加通过project(Employee.class)
之类的选项直接投射到给定域类型的字段上的选项。