MongoDB-将字符串数组与二维数组合并
我有一个MongoDB文档,如下所示:MongoDB-将字符串数组与二维数组合并,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个MongoDB文档,如下所示: "skills" : [ [ ObjectId("5dbaf9dd95e131fb3e23ef47"), ObjectId("5dc3cd49796b017513c1bc6d"), ObjectId("5dc3cd52796b017513c1bc75"), ObjectId("5dc3cd5b796b017513c1bc82") ], [
"skills" : [
[
ObjectId("5dbaf9dd95e131fb3e23ef47"),
ObjectId("5dc3cd49796b017513c1bc6d"),
ObjectId("5dc3cd52796b017513c1bc75"),
ObjectId("5dc3cd5b796b017513c1bc82")
],
[
ObjectId("5dbaf9dd95e131fb3e23ef47"),
ObjectId("5dbaf7fc251cee32ce4d3f84")
]
],
"names" : [
"John Davis",
"Dan Malko"
]
(名称数组-字符串和技能数组)
我希望结果是:
"skillsWithNames": [
{
"name": "John Davis",
"skills": [
ObjectId("5dbaf9dd95e131fb3e23ef47"),
ObjectId("5dc3cd49796b017513c1bc6d"),
ObjectId("5dc3cd52796b017513c1bc75"),
ObjectId("5dc3cd5b796b017513c1bc82")
]
},
{
"name":"Dan Malko",
"skills":[
ObjectId("5dbaf9dd95e131fb3e23ef47"),
ObjectId("5dbaf7fc251cee32ce4d3f84")
]
}
]
(包含对象的数组,其中每个对象包含名称和技能)
两个数组的索引相同,因此技能[0]属于该人员的姓名[0]
执行此操作的正确查询是什么
谢谢。您可以使用下面的聚合
db.collection.aggregate([
{ "$project": {
"skillsWithName": {
"$map": {
"input": "$skills",
"in": {
"name": {
"$arrayElemAt": [
"$names",
{ "$indexOfArray": ["$skills", "$$this"] }
]
},
"skills": "$$this"
}
}
}
}}
])
输出
[
{
"skillsWithName": [
{
"name": "John Davis",
"skills": [
ObjectId("5dbaf9dd95e131fb3e23ef47"),
ObjectId("5dc3cd49796b017513c1bc6d"),
ObjectId("5dc3cd52796b017513c1bc75"),
ObjectId("5dc3cd5b796b017513c1bc82")
]
},
{
"name": "Dan Malko",
"skills": [
ObjectId("5dbaf9dd95e131fb3e23ef47"),
ObjectId("5dbaf7fc251cee32ce4d3f84")
]
}
]
}
]
完美的作品!