当前位置: 首页 > 知识库问答 >
问题:

Mongodb与spring一起,将所有行分组为一组,并使用disticnt值

董弘新
2023-03-14

我用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"]}

对于我的上下文,我需要使用蒙古操作(mongoTemboard),我尝试了很多方法,但我没有得到想要的结果,有人能帮我吗?

共有1个答案

东明德
2023-03-14

你可以一起去

  • $unwind解构数组

这是剧本

db.collection.aggregate([
  {
    "$unwind": "$resourcesInspected"
  },
  {
    "$group": {
      "_id": null,
      "resourcesInspected": {
        "$addToSet": "$resourcesInspected"
      }
    }
  }
])

工作旺戈游乐场

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

 unwind("resourcesInspected"),
 group()
   .addToSet("$resourcesInspected").as("resourcesInspected")
 类似资料:
  • 在mongodb聚合调用中,如何使用$group操作符将管道中的所有文档分组为一个结果? 假设我有一组记录,看起来像这样: 我想使用聚合函数在数据库中查询在给定日期范围内注册的用户列表,并将其作为列表返回。我想要一个如下的结果: 我的查询如下所示: 到目前为止,一切顺利。我现在有一部分记录,所有记录的注册日期都在所需的范围内。但这就是我遇到麻烦的地方。现在,我想将所有这些记录分组到一个包含所有ID

  • 问题内容: 我的项目遇到了麻烦。谁能向我解释为什么我不能使用来访问? 下面是我的切入点的代码: 我正在尝试使用该方法访问“ 菜单” 组件中的设置。请参阅下面的 菜单 : 我真的很想知道为什么我可以使用来访问和值。我已经阅读了文档并寻找了其他资源,但是我还没有答案,但是我希望有办法可以做到。 问题答案: method中的第一个参数是包含任何属性和方法的对象,它不引用存在属性的React组件。 如果您

  • 问题内容: 使用,为什么它对(原始类型)和数组显示不同的列表大小? a)对于数组,每当我执行以下程序时,列表大小= 1 b)但是,如果我从数组类型更改为array(如),则列表大小为4,我认为这是正确的。 PS :使用(包装类)数组,则结果很好,但是我不确定为什么在原始数组中列表大小为1。请解释。 问题答案: 由于Java泛型而无法保存原始值(请参阅类似的问题)。因此,当您调用Arrays 时,将

  • 问题内容: 我正在尝试从SQLite表中提取数据,该表将键值对存储在双列中。例如,用钥匙,,,和,该表将如下所示: 我想执行一个查询,以行作为键,值作为行,每行都给我。像这样: 我唯一能想到的解决方案是每个键的联接: 有一个更好的方法吗? 问题答案: 另一个可用的选项是使用 条件聚合 :

  • 问题内容: 我是Spring的新手。 我们正在使用Spring Security功能。数据库连接:JPA的eclipselink实现。数据库:MySql 使用spring security时,身份验证提供程序的配置如下- 但是在JPA中,我们没有定义数据源,我们将Persistence unit与provider一起使用 那么,我们如何配置身份验证提供程序,以便将JPA用于数据库连接? 数据源引用

  • 问题内容: 我有一个“班级”,称为: 对于我的项目而言,它们所涉及的所有枚举都非常重要(因为这是类的构造函数中的一个参数)。 我如何使用层次结构/嵌套来实现以下目的: 一种测试an 是否属于A,B或C组的方法。例如,类似于或将是返回true的公共方法。 能够做同样的事情组的子组,和。例如,A组可能有子组,和。然后,我想要一个做某事的方法,例如which 。 一种无需所有复杂名称即可完成所有代码的方