Mongodb Получить записи, основанные только на день и месяц - PullRequest
0 голосов
/ 04 февраля 2019

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

Сценарий: Мы храним BirthDate (Jjava.uti.Date) в dong Монго, который был сохранен как дата ISO.Сейчас мы пытаемся найти записи, которые соответствуют только дням и месяцам.Так что мы можем сопоставить объект из списка.

Я прошел несколько решений, и вот способ, которым я пытаюсь, но это дает мне нулевой набор записей.

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);

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

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

1 Ответ

0 голосов
/ 07 февраля 2019

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

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

Поле _id по умолчанию включено в выходные документы.Чтобы включить любые другие поля из входных документов в выходные документы, необходимо явно указать включение в $ project.
см .: MongoDBReference - $ project (агрегирование)

Я создал DATAMONGO-2200 , чтобы добавить опцию для проецирования непосредственно на поля данного типа домена через что-то вроде project(Employee.class).

...