Mongodb 和 spring,将所有行分组为一个并具有不同的值
Mongodb with spring, Group all rows in one and with disticnt values
我已经实现了使用 mongoTemplate 的投影,结果如下:
{"resourcesInspected": ["CD0626UHEA", "CD0626UKE9"]}
{"resourcesInspected": ["CD0GNDPB1E"]}
{"resourcesInspected": ["CD0H7L789D", "CD0H7L8RF7"]}
{"resourcesInspected": ["CD0FTHYK2B"]}
{"resourcesInspected": ["CD04H5K4B1", "CD0725K788", "CD0725K58A"]}
{"resourcesInspected": ["CD06JXHJ8A", "CD04E9LCED"]}
为此,我这样做了:
static final String resourcesInspected ="resourcesInspected";
ProjectionOperation projectionOperation = Aggregation
.project(resourcesInspected).andExpression("split(resourcesInspected, ',')")
.as(resourcesInspected)
.andExclude("_id");
template.aggregate(newAggregation(projectionOperation),"kpi", DBObject.class).getMappedResults()
.forEach(System.out::println);
现在我真正想要的是将所有行分组为一个,因为它是同一个字段,并且为了最终每个(键,值)一个,所有值都是 不同的,类似的东西:
{"resourcesInspected": ["CD0626UHEA", "CD0626UKE9","CD0626UHEZ","CXX0626UHEA"]}
对于我的上下文,我需要使用 MongoOperations(mongoTemplate),我尝试了很多方法,但我没有得到想要的结果,有人可以帮助我吗?
你可以选择
$unwind
解构数组
$group
重构无重复
这是脚本
db.collection.aggregate([
{
"$unwind": "$resourcesInspected"
},
{
"$group": {
"_id": null,
"resourcesInspected": {
"$addToSet": "$resourcesInspected"
}
}
}
])
因此,对于您的 java 代码,您需要添加以下内容
unwind("resourcesInspected"),
group()
.addToSet("$resourcesInspected").as("resourcesInspected")
我已经实现了使用 mongoTemplate 的投影,结果如下:
{"resourcesInspected": ["CD0626UHEA", "CD0626UKE9"]}
{"resourcesInspected": ["CD0GNDPB1E"]}
{"resourcesInspected": ["CD0H7L789D", "CD0H7L8RF7"]}
{"resourcesInspected": ["CD0FTHYK2B"]}
{"resourcesInspected": ["CD04H5K4B1", "CD0725K788", "CD0725K58A"]}
{"resourcesInspected": ["CD06JXHJ8A", "CD04E9LCED"]}
为此,我这样做了:
static final String resourcesInspected ="resourcesInspected";
ProjectionOperation projectionOperation = Aggregation
.project(resourcesInspected).andExpression("split(resourcesInspected, ',')")
.as(resourcesInspected)
.andExclude("_id");
template.aggregate(newAggregation(projectionOperation),"kpi", DBObject.class).getMappedResults()
.forEach(System.out::println);
现在我真正想要的是将所有行分组为一个,因为它是同一个字段,并且为了最终每个(键,值)一个,所有值都是 不同的,类似的东西:
{"resourcesInspected": ["CD0626UHEA", "CD0626UKE9","CD0626UHEZ","CXX0626UHEA"]}
对于我的上下文,我需要使用 MongoOperations(mongoTemplate),我尝试了很多方法,但我没有得到想要的结果,有人可以帮助我吗?
你可以选择
$unwind
解构数组$group
重构无重复
这是脚本
db.collection.aggregate([
{
"$unwind": "$resourcesInspected"
},
{
"$group": {
"_id": null,
"resourcesInspected": {
"$addToSet": "$resourcesInspected"
}
}
}
])
因此,对于您的 java 代码,您需要添加以下内容
unwind("resourcesInspected"),
group()
.addToSet("$resourcesInspected").as("resourcesInspected")