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
数组。在种族数组中,将根据结果过滤器进行过滤
也就是说:查询将使用filterrace通过其id
获得一个race.\u id
并且在race内部,只有位置
为秒的对象将被更新
因此,查询将更新所需的对象。你可以举个例子
StandingsModel.updateOne({ "Races.RaceResults._id": "5fd3966d2769dc12dc0105e2"}, {
"$set": {
"Races.$.RaceResults.$.driverName": 'Vettel'}
})