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"
      }
    }
  }
])

工作Mongo playground

因此,对于您的 java 代码,您需要添加以下内容

 unwind("resourcesInspected"),
 group()
   .addToSet("$resourcesInspected").as("resourcesInspected")