gpt4 book ai didi

mongodb - Mongoose,更新另一个数组内的数组内的对象

转载 作者:行者123 更新时间:2023-12-04 08:26:02 26 4
gpt4 key购买 nike

有没有办法更新和对象内部和数组,它也像这个例子中的另一个数组一样?
这就是集合的样子:

{
"_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"
}
]
}
]
}

因此,如果我想更改例如“美国大奖赛”而不是“Sakhir 大奖赛”,我会选择:
StandingsModel.updateOne({ "Races._id": "5fd3966d2769dc12dc0105f4"}, {
"$set": {
"Races.$.gpName": 'United States Grand Prix'}
})
但是如何更改 RaceResults 中的“driverName”或“position”值?
我试过设置:
(为了澄清起见,在本例中,我想更改阿布扎比大奖赛内的第二个司机姓名)
StandingsModel.updateOne({ "Races.RaceResults._id": "5fd3966d2769dc12dc0105e2"}, {
"$set": {
"Races.$.RaceResults.$.driverName": 'Vettel'}
})
但是当然这不能按预期工作, Mongoose 发回错误代码 2。
任何的想法?
谢谢。

最佳答案

您可以使用 $[<identifier>] .还有一个名为 Update Nested Arrays in Conjunction with $[] 的特定部分.
您可以使用这种方式过滤数组以查找您的 Race id 优先于您的 RaceResult ID。
您可以使用此查询:

db.collection.update(
{ "_id": "5fd3966d2769d212dc0104a4" },
{ "$set": { "Races.$[race].RaceResult.$[result].driverName": "Vettel" } },
{ "arrayFilters": [
{ "race._id": "5fd3966d2769dc12dc0105df" },
{ "result.position": "Second" } ]
})
$set stage 会将对象修改为 Race匹配过滤器的数组 race .而在 Race 数组中,将通过 result 过滤筛选。
即:查询将通过其 id 获得一场比赛。使用过滤器 race._id而比赛内部只有 position的物体是 Second将会被更新。
因此查询将更新您想要的对象。您可以查看示例 here

关于mongodb - Mongoose,更新另一个数组内的数组内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65255881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com