Я работаю с 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)