gpt4 book ai didi

java - Spring 数据: MongoDB: Aggregation: group by nested object

转载 作者:行者123 更新时间:2023-12-01 18:01:51 25 4
gpt4 key购买 nike

我正在使用 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.:我还尝试使用 $replaceRoot 作为 data 字段,这样我就可以按 someField 对文档进行分组,但它是较新的数据库版本(版本 3.4 中的新增功能) )

最佳答案

难道你只是有一点错字:No property someFiled

尝试以下操作:

group("$data.someField").count().as("count")

关于java - Spring 数据: MongoDB: Aggregation: group by nested object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60613859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com