按多个字段对值进行分组

group values by multiple fields

我有这些文件:

{
  "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_1 和 Sigle_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'}}}])

您需要使用$facet here to $group separate Sigle_1 and Sigle_2 and then $concatArrays to merge both arrays and then finally $group来区分整个数据

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

你查一下here

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

{
  "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"
}