【问题标题】:MongoDB - Merge Array of Strings With 2-Dimensional ArrayMongoDB - 将字符串数组与二维数组合并
【发布时间】:2019-11-19 11:01:02
【问题描述】:

我有一个如下所示的 MongoDB 文档:

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

执行此操作的正确查询是什么?

谢谢。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    你可以使用下面的聚合

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

    【讨论】:

    • 完美运行!
    猜你喜欢
    • 2020-02-27
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2021-06-12
    • 2013-03-28
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多