MongoDB - 如何使用 $unset 删除部分字段

MongoDB - How to remove part of field with $unset

我在 MongoDB 中有一个数据库,其中包含具有以下结构的条目 image

我在 Python 中使用一个脚本,我用它从这个结构中检索信息,然后将其保存到 csv。

最终目标是仅删除 parameters 结构的某些部分。例如,我想保留 parameters[0].valuesparameters[1].values 但不保留 parameters[2:5].values

我没有这方面的经验,但我使用的命令如下

{"$unset":"exercises.parameters.values"] }

但这将从 parameters 内的所有对象中删除所有 values。由于变量在对象中具有相同的名称,因此我无法找到一种方法来指定我想要的对象。

我也试过像这样建立索引

{"$unset":"exercises.parameters[2].values"] }

但这似乎不起作用...

非常感谢您的帮助!

更新

db.collection.update({
  "_id": 1
},
{
  "$unset": {
    "exercises.$[].parameters.2.values": "",
    "exercises.$[].parameters.3.values": "",
    "exercises.$[].parameters.4.values": "",
    "exercises.$[].parameters.5.values": ""
  }
},
{
  "multi": true
})

mongoplayground


汇总

db.collection.aggregate([
  {
    $set: {
      "exercises": {
        "$map": {
          "input": "$exercises",
          "as": "item",
          "in": {
            "$mergeObjects": [
              "$$item",
              {
                parameters: {
                  $slice: [ "$$item.parameters", 2 ]
                }
              }
            ]
          }
        }
      }
    }
  }
])

mongoplayground