Данные Spring: MongoDB: Агрегация: группировка по вложенному объекту - PullRequest
0 голосов
/ 10 марта 2020

Я работаю с MongoDB 3.2.2 и Spring Data 2.1.8. У меня есть следующая модель документа с полем Dynami c data:

@Data
@Accessors(chain = true)
@Document(collection = "someCollection")
public class SomeEntity implements Serializable {

    @Id
    String id;

    //some fields

    Map<String, Object> data;

}

Моя цель - сгруппировать документы по ключу c из поля data. Например, у меня есть следующее содержимое базы данных:

{
  "_id": "5e5f8a89b70e4123a8285aa3",
  "data": {
    "someField": "someValue",
  }
},
{
  "_id": "5e5f72fcb70e4123a8285aa2",
  "data": {
    "someField": "someValue",
  }
},
{
  "_id": "5e5d22939ce87e2fccd80973",
  "data": {
    "someField": "otherValue",
  }
}

Я хотел бы построить группирование агрегации, используя Spring Data, как следующий запрос для MongoDB:

$group: {
  {
    _id: "$data.someField",
    count: {
      $sum: 1
    }
  }
}

And I ' Я хотел бы получить следующий результат:

{
  _id: "someValue",
  count: 2
},
{
  _id: "otherValue",
  count: 1
}

Для этой цели я использую следующую группировку с org.springframework.data.mongodb.core.aggregation.Aggregation:

Aggregation.group("$data.someField").count().as("count")

Но во время выполнения у меня возникла ошибка совокупности:

org.springframework.data.mapping.PropertyReferenceException: No property someField found for type Object! Traversed path: SomeEntity.data.

Что не так? Может ли кто-нибудь помочь мне, пожалуйста?

PS: я также пытался использовать поле $ replace Root для data, чтобы я мог группировать документы по someField, но это более новая версия БД (Новое в версии 3.4)

1 Ответ

0 голосов
/ 10 марта 2020

Может быть, у вас есть только небольшая опечатка: No property someFiled?

Попробуйте следующее:

group("$data.someField").count().as("count")
...