Mongodb仅基于日期和月份检索记录

时间:2019-02-04 11:44:02

标签: spring spring-boot spring-data-mongodb

我是在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)

1 个答案:

答案 0 :(得分:0)

请尝试指定要包含在$project阶段中的字段。

project("birthDate", "...").andExpression("...
  

默认情况下,_id字段包含在输出文档中。要将输入文档中的任何其他字段包括在输出文档中,必须在$ project中明确指定包含内容。
  参见: MongoDBReference - $project (aggregation)

我创建了DATAMONGO-2200,以添加通过project(Employee.class)之类的选项直接投射到给定域类型的字段上的选项。