我正在使用MongoDB 3.2.2和Spring Data。我有以下带有动态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
}
为此目标,我正在使用下一个分组:
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版中的新功能)
可能是您只有一点错字:No property someFiled
?
尝试以下操作:
group("$data.someField").count().as("count")