Группа запросов Spring Data Mongodb, автор: - PullRequest
0 голосов
/ 18 июня 2020

Я использую Spring с mongodb, я хочу создать запрос для группировки моих документов по заголовку, используя GROUP BY, например SQL, у меня есть 3 документа:

{
  _id: 5eeabfda75204e17242d3ff4,
  title: "Review",
  message: "hi this is a review 1",
  created: 2020-06-18T00: 18: 35.608+00: 00,
  _class: "com.guestnhousebackpfe.models.Notifications"
},
{
  _id: 5eeabfda75204e17242d3ff5,
  title: "Review",
  message: "hi this is a review 2",
  created: 2020-06-15T00: 18: 35.608+00: 00,
  _class: "com.guestnhousebackpfe.models.Notifications"
},
{
  _id: 5eeabfda75204e17242d3ff6,
  title: "Reservation",
  message: "hi this is a a reservation",
  created: 2020-06-15T00: 18: 35.608+00: 00,
  _class: "com.guestnhousebackpfe.models.Notifications"
}

Ожидаемый результат: Я хочу чтобы мои документы были сгруппированы по заголовку:

{
  "Review": [
    {
      _id: 5eeabfda75204e17242d3ff4,
      title: "Review",
      message: "hi this is a review 1",
      created: 2020-06-18T00: 18: 35.608+00: 00,
      _class: "com.guestnhousebackpfe.models.Notifications"
    },
    {
      _id: 5eeabfda75204e17242d3ff5,
      title: "Review",
      message: "hi this is a review 2",
      created: 2020-06-15T00: 18: 35.608+00: 00,
      _class: "com.guestnhousebackpfe.models.Notifications"
    },

  ],
  "Reservation": [
    {
      _id: 5eeabfda75204e17242d3ff6,
      title: "Reservation",
      message: "hi this is a a reservation",
      created: 2020-06-15T00: 18: 35.608+00: 00,
      _class: "com.guestnhousebackpfe.models.Notifications"
    }
  ]
}

Как я могу этого добиться?

1 Ответ

0 голосов
/ 18 июня 2020

ОБНОВЛЕНИЕ

Мне удалось заставить его работать:

TypedAggregation<Notifications> aggregation = newAggregation(Notifications.class,
                 match(Criteria.where("idUser").is(idUser)),
                 group("title").push("$$ROOT").as("notifications")
            );
        AggregationResults<Notifications> results = mongoOperations.aggregate(aggregation, Notifications.class);

        return results.getRawResults();
...