MongoDB:用外部数组中的数据替换数组中的值

5ktev3wc  于 2023-08-04  发布在  Go
关注(0)|答案(1)|浏览(93)

在MongoDB数据库中,我有这个集合:

"cities" {
    "name": "London",
    "suburbs": [
        { "_id: ObjectId('...')", "city_id": 0, "name": "Chelsea", "population": "41k" },
        { "_id: ObjectId('...')", "city_id": 1, "name": "Fulham", "population": "87k" },
        { "_id: ObjectId('...')", "city_id": 2, "name": "Kensington", "population": "64k" }
    ]
}

字符串
我想根据JavaScript对象数组向此集合添加值。
目标是这样的:

let cities = [
    { "team": "Chelsea FC", "division": "premier league", "id": 0 },
    { "team": "Fulham FC", "division": "premier league", "id": 1 },
    { "team": "Kensington FC", "division": "CCFL", "id": 2 }
]


现在,我用JavaScript中的for循环解决了这个问题,就像这样:

for(let o = 0; o < cities.length; o++) {
    db.cities.updateOne(
        { "name": "London", "suburbs.city_id": cities[o].id },
        {
            "suburbs.$.team": cities[o].team,
            "suburbs.$.division": cities[o].division
        }
    )
}


有没有一种方法可以在一个查询中完成所有事情?
如何在MongoDB查询中调用外部变量?
任何帮助都欢迎。
多谢了

vpfxa7rd

vpfxa7rd1#

我一直在想办法。
你可以在这里查看:https://mongoplayground.net/p/DZZy1XXtVv _

db.cities.update({
  "name": "London"
},
[
  {
    "$set": {
      "suburbs": {
        $map: {
          input: "$suburbs",
          as: "val",
          in: {
            $mergeObjects: [
              "$$val",
              {
                $first: {
                  $filter: {
                    //input : cities
                    input: [
                      {
                        "team": "Chelsea FC",
                        "division": "premier league",
                        "id": 0
                      },
                      {
                        "team": "Fulham FC",
                        "division": "premier league",
                        "id": 1
                      },
                      {
                        "team": "Kensington FC",
                        "division": "CCFL",
                        "id": 2
                      }
                    ],
                    as: "team",
                    cond: {
                      $eq: [
                        "$$val.city_id",
                        "$$team.id"
                      ]
                    }
                  },
                },
              },
            ],
          }
        }
      }
    }
  }
])

字符串

相关问题