按多个字段对值进行分组
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"
}
我有这些文件:
{
"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"
}