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

按多个字段分组值

费星晖
2023-03-14

我有以下文件

{
  "Sigle_1": "BIOS",
  "Sigle_2": "BFTA"
},
{
  "Sigle_1": "BERP",
  "Sigle_2": "BEST"
},
{
  "Sigle_1": "BHDL",
  "Sigle_2": "BIOS"
},
{
  "Sigle_1": "BIPM",
  "Sigle_2": "BEST"
},
{
  "Sigle_1": "BHDL",
  "Sigle_2": "BIOS"
}

如何发出请求,将Sigle\U 1和Sigle\U 2连接起来,并将值reslut分组?

预期结果示例:

{
  "Sigle": "BIOS",
},
{
  "Sigle": "BFTA",
},
{
  "Sigle": "BERP",
},
{
  "Sigle": "BEST",
},
{
  "Sigle": "BHDL",
},
{
  "Sigle": "BIPM",
}

我试过了,但还不完全

db.users.aggregate([{$group: {_id: {Sigle1: '$Sigle_1', Sigle2: '$Sigle_2'}}}])

共有2个答案

何博涛
2023-03-14

我可以在单个查询中添加另一个字段!!!

{
  "Sigle_1": "BIOS",
  "Sigle_2": "BFTA",
  "Name_1": "Basic Input Output System",
  "Name_2": "Belgian Food Truck Association"

},
{
  "Sigle_1": "BERP",
  "Sigle_2": "BEST",
  "Name_1": "British Experimental Rotor Programme",
  "Name_2": "Board of European Students of Technology"
},
{
  "Sigle_1": "BHDL",
  "Sigle_2": "BIOS",
  "Name_1": "B Hardware Description Language",
  "Name_2": "Basic Input Output System"
},
{
  "Sigle_1": "BIPM",
  "Sigle_2": "BEST",
  "Name_1": "Brevet d'initiation au parachutisme militaire",
  "Name_2": "Board of European Students of Technology"
},
{
  "Sigle_1": "BHDL",
  "Sigle_2": "BIOS",
  "Name_1": "B Hardware Description Language",
  "Name_2": "Basic Input Output System"
}
越学义
2023-03-14

您需要在此处使用$方面$组分离单列1单列2,然后使用$Concatarray合并两个数组,最后使用$组区分整个数据

db.collection.aggregate([
  { "$facet": {
    "array1": [
      { "$group": {
        "_id": "$Sigle_1"
      }}
    ],
    "array2": [
      { "$group": {
        "_id": "$Sigle_2"
      }}
    ]
  }},
  { "$addFields": {
    "data": {
      "$concatArrays": ["$array1", "$array2"]
    }
  }},
  { "$unwind": "$data" },
  { "$replaceRoot": { "newRoot": "$data" }},
  { "$group": {
    "_id": "$_id"
  }},
  { "$project": { "Sigle": "$_id", "_id": 0 }}
])

输出

[
  {
    "Sigle": "BFTA"
  },
  {
    "Sigle": "BEST"
  },
  {
    "Sigle": "BHDL"
  },
  {
    "Sigle": "BERP"
  },
  {
    "Sigle": "BIPM"
  },
  {
    "Sigle": "BIOS"
  }
]

你在这里检查一下

 类似资料:
  • 问题内容: 我发现的唯一接近的事情是:Elasticsearch中的多个分组方式 基本上,我试图获得与以下查询等效的ES : 年龄和性别本身很容易获得: 这使: 但是现在我需要这样的东西: 请注意,这是针对年龄范围的“映射”,因此它们实际上表示的是:)而不是数字。例如,性别[1](“男性”)细分为[246]的年龄范围[0](“18岁以下”)。 问题答案: 由于您只有2个字段,因此一种简单的方法是使

  • 我可以同时使用和吗?

  • 问题内容: 我正在使用Angular-Filter的groupBy过滤器。 来自GitHub的示例 : 因此,该示例按 team 对玩家集合进行 分组 。想象一下,每个玩家对象都有一个 年龄 属性: 我想GROUP BY 团队 和 年龄 。我怎样才能做到这一点? 问题答案: 遵循多个字段的示例

  • 需要帮助的一个案件流与分组由我希望能够分组由2个不同的字段,并有其他大小数字段的总和,根据不同的分组。以下是我的实体: 让我们假设我有以下列表作为输入: 下面有一个解决方案的开头,但我在添加第二个聚合来总结余额的时候阻止了:

  • 这将产生以下结果 我所感兴趣的实际上只是上面结果中的列表,我希望理想地将其作为groupby操作的一部分来完成。我知道这是可以做到的,例如,通过循环结果映射结构。但是有没有一种方法可以使用流来实现它呢?

  • 问题内容: 我正在尝试按其字段(即 Person.java) 对Java对象进行分组 __ 因此,如果我有 n个 Person对象,那么将所有人都以“ David”命名的最简单的方法是? 我在Google上发现了此文件(但无法编译),这似乎是我正在寻找的东西:http : //www.anzaan.com/2010/06/grouping-objects- using-objects-proper