首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring data: MongoDB: Aggregation: group by嵌套对象

Spring data: MongoDB: Aggregation: group by嵌套对象
EN

Stack Overflow用户
提问于 2020-03-10 16:29:18
回答 1查看 792关注 0票数 0

我正在使用MongoDB 3.2.2和Spring Data 2.1.8。我有以下带有动态data字段的文档模型:

代码语言:javascript
复制
@Data
@Accessors(chain = true)
@Document(collection = "someCollection")
public class SomeEntity implements Serializable {

    @Id
    String id;

    //some fields

    Map<String, Object> data;

}

我的目标是根据data字段中的特定关键字对文档进行分组。例如,我有以下db内容:

代码语言:javascript
复制
{
  "_id": "5e5f8a89b70e4123a8285aa3",
  "data": {
    "someField": "someValue",
  }
},
{
  "_id": "5e5f72fcb70e4123a8285aa2",
  "data": {
    "someField": "someValue",
  }
},
{
  "_id": "5e5d22939ce87e2fccd80973",
  "data": {
    "someField": "otherValue",
  }
}

我想使用Spring数据构建分组聚合,如下面的MongoDB查询所示:

代码语言:javascript
复制
$group: {
  {
    _id: "$data.someField",
    count: {
      $sum: 1
    }
  }
}

我想收到以下结果:

代码语言:javascript
复制
{
  _id: "someValue",
  count: 2
},
{
  _id: "otherValue",
  count: 1
}

为了实现这个目标,我将使用org.springframework.data.mongodb.core.aggregation.Aggregation的下一个分组

代码语言:javascript
复制
Aggregation.group("$data.someField").count().as("count")

但是我在执行聚合的过程中遇到了一个错误:

代码语言:javascript
复制
org.springframework.data.mapping.PropertyReferenceException: No property someField found for type Object! Traversed path: SomeEntity.data.

出什么问题了?有人能帮帮我吗?

附言:我也尝试过对data字段使用$replaceRoot,所以我可以按someField对文档进行分组,但它是较新的数据库版本(3.4版中的新版本)

EN

回答 1

Stack Overflow用户

发布于 2020-03-11 03:12:25

会不会你只有一个小小的拼写错误:No property someFiled

尝试以下操作:

代码语言:javascript
复制
group("$data.someField").count().as("count")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60613859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档