Я новичок в написании агрегированных запросов в 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 содержит только дату рождения (дата) и адрес электронной почты (строка)
Пожалуйста, попробуйте указать поля, которые будут включены в этап $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).