我正在使用MongoDB 3.2.2和Spring Data 2.1.8。我具有动态data
字段的以下文档模型:
@Data
@Accessors(chain = true)
@Document(collection = "someCollection")
public class SomeEntity implements Serializable {
@Id
String id;
//some fields
Map<String, Object> data;
}
我的目标是通过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
}
}
}
我想收到以下结果:
{
_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.
怎么了?有人可以帮我吗?
P.S .:我也曾尝试在data
字段中使用$ replaceRoot,所以我可以按someField
对文档进行分组,但是它是较新的数据库版本(3.4版中的新功能)
答案 0 :(得分:0)
是否可能只有一点错字:No property someFiled
?
尝试以下操作:
group("$data.someField").count().as("count")