[英]Update Value on Multi-dimensional Array?
我想根据 destinos.ciudad_id 和 destinos_origenes.ciudad_id 更新 destinos.origenes.base_price,到目前为止,这是我一直在做的事情:
//
$updateResult2 = $coll_rutas->updateOne(
/* CONDITION */
[
"_id" => new \MongoDB\BSON\ObjectId($ruta_id),
"destinos.ciudad_id" => 1, // for morelia, mich
"destinos.origenes.ciudad_id" => 122 // for selma, ca
],
/* update */
[
'$set' => [
'destinos.$[].origenes.$[].base_price' => $destino_origen_amount
]
]
);
这是 mongo 对象:
{
"id": "5e27ee3e09558a0570003132",
"nombre": "THE RUTA"
"clave": "TR",
"descripcion": null,
"active": true,
"destinos": [
{
"ciudad_id": "1",
"nombre_destino": "Morelia, Mich",
"orden": "1",
"notas": null,
"origenes": [
{
"ciudad_id": "12",
"nombre_origen": "Tlaltenango, Zac",
"orden": "1",
"notas": null,
"base_price": "666.66"
},
{
"ciudad_id": "30",
"nombre_origen": "Camargo, Chih",
"orden": "2",
"notas": null,
"base_price": "666.66"
},
{
"ciudad_id": "122",
"nombre_origen": "Selma, Ca",
"orden": "3",
"notas": null,
"base_price": "666.66"
}
]
},
{
"ciudad_id": "2",
"nombre_destino": "Zamora, Mich",
"orden": "2",
"notas": null,
"origenes": [
{
"ciudad_id": "12",
"nombre_origen": "Tlaltenango, Zac",
"orden": "1",
"notas": null,
"base_price": "666.66"
},
{
"ciudad_id": "30",
"nombre_origen": "Camargo, Chih",
"orden": "2",
"notas": null,
"base_price": "666.66"
},
{
"ciudad_id": "122",
"nombre_origen": "Selma, Ca",
"orden": "3",
"notas": null,
"base_price": "666.66"
}
]
}
]
}
使用arrayFilters
工作正常,我用你的对象示例进行了测试。
db.getCollection('temp').update({}, {
$set: {
"destinos.$[d].origenes.$[o].base_price":450
},
}, {
arrayFilters: [
{
"d.ciudad_id": "1",
},
{
"o.ciudad_id": "122"
}
]
})
并检查这个: https : arrayFilter
因为arrayFilter
是选项中的一个元素。
[
"_id" => new \MongoDB\BSON\ObjectId($ruta_id)
],
[
'$set' => [
"destinos.$[d].origenes.$[o].base_price" => 450
]
],
[
"arrayFilters" =>
[
["d.ciudad_id" => "1"],["o.ciudad_id" => "122"]
]
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.