Mongodb Извлекать записи только по дню и месяцу

Я новичок в написании агрегированных запросов в Mongo DB + Spring.

Сценарий: Мы храним дату рождения (Jjava.uti.Date) в базе данных mongo, которая хранится как дата ISO. Теперь мы пытаемся найти записи, которые совпадают только с 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);

Я должен упустить какую-то важную вещь, которая дает мне эти нулевые данные.

Дополнительная информация: объект Employee содержит только дату рождения (дата) и адрес электронной почты (строка)

0
0
67
1

Ответы 1

Пожалуйста, попробуйте указать поля, которые будут включены в этап $project.

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

The _id field is, by default, included in the output documents. To include any other fields from the input documents in the output documents, you must explicitly specify the inclusion in $project.
see: MongoDBReference - $project (aggregation)

Я создал ДАТАМОНГО-2200, чтобы добавить возможность прямого проецирования на поля данного типа домена через что-то вроде project(Employee.class).

Другие вопросы по теме