Spring数据:MongoDB:聚合:按嵌套对象分组

问题描述 投票:0回答:1

我正在使用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版中的新功能)

java mongodb mongodb-query spring-data spring-data-mongodb
1个回答
0
投票

可能是您只有一点错字:No property someFiled

尝试以下操作:

group("$data.someField").count().as("count")
© www.soinside.com 2019 - 2024. All rights reserved.