Mongodb Mongoose,更新位于另一个数组中的数组内的对象

Mongodb Mongoose,更新位于另一个数组中的数组内的对象,mongodb,mongoose,mongoose-schema,Mongodb,Mongoose,Mongoose Schema,是否有一种方法可以更新和对象内部和数组,该数组也在另一个数组中,如本例中所示 这是收藏的风格: { "_id": "5fd3966d2769d212dc0104a4", "Races": [ { "_id": "5fd3966d2769dc12dc0105f4", "gpName": "Sakhir Grand Prix&quo

是否有一种方法可以更新和对象内部和数组,该数组也在另一个数组中,如本例中所示

这是收藏的风格:

{
  "_id": "5fd3966d2769d212dc0104a4",
  "Races": [
    {
      "_id": "5fd3966d2769dc12dc0105f4",
      "gpName": "Sakhir Grand Prix",
      "RaceResult": [
        {
          "_id": "5fd3966d2769dc12dc0105e0",
          "position": "First",
          "driverName": "Hamilton"
        },
        {
          "_id": "5fd3966d2769dc12dc0105e1",
          "position": "Second",
          "driverName": "Vettel"
        }
      ]
    },
    {
      "_id": "5fd3966d2769dc12dc0105df",
      "gpName": "Abu Dhabi Grand Prix",
      "RaceResult": [
        {
          "_id": "5fd39452d2769dc12dc0105df",
          "position": "First",
          "driverName": "Bottas"
        },
        {
          "_id": "5fd3966d2769dc12dc0105e2",
          "position": "Second",
          "driverName": "Hamilton"
        }
      ]
    }
  ]
}

因此,如果我想改变例如,“美国大奖赛”而不是“萨希尔大奖赛”,我会选择:

StandingsModel.updateOne({ "Races._id": "5fd3966d2769dc12dc0105f4"}, {
        "$set": {
            "Races.$.gpName": 'United States Grand Prix'}
})
但是,如何更改RaceResults中的“driverName”或“position”值呢

我试过设置:

(为了澄清,在本例中,我想更改阿布扎比GP中的第二个驾驶员姓名)

但这当然不能像预期的那样工作,mongoose会发回一个错误代码2

有什么想法吗

谢谢。

您可以使用。还有一个特定的部分叫做

您可以使用这种方式过滤数组,首先在
Race结果
id之后查找您的
Race
id

您可以使用以下查询:

db.collection.update(
{“_id”:“5fd3966d2769d212dc0104a4”},
{“$set”:{“Races.$[race].racesresult.$[result].driverName:“Vettel”},
{“阵列过滤器”:[
{“race._id”:“5fd3966d2769dc12dc0105df”},
{“result.position”:“Second”}]
})
$set
阶段将把对象修改为与过滤器
Race
匹配的
Race
数组。在种族数组中,将根据
结果
过滤器进行过滤

也就是说:查询将使用filter
race通过其
id
获得一个race.\u id
并且在race内部,只有
位置
秒的对象将被更新

因此,查询将更新所需的对象。你可以举个例子

StandingsModel.updateOne({ "Races.RaceResults._id": "5fd3966d2769dc12dc0105e2"}, {
        "$set": {
            "Races.$.RaceResults.$.driverName": 'Vettel'}
})