I would like to update destinos.origenes.base_price based on destinos.ciudad_id and destinos_origenes.ciudad_id, so far this is what I am been doing witouth success:
//
$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
]
]
);
This is the mongo object:
{
"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"
}
]
}
]
}
With arrayFilters
works fine, I tested with your object example.
db.getCollection('temp').update({}, {
$set: {
"destinos.$[d].origenes.$[o].base_price":450
},
}, {
arrayFilters: [
{
"d.ciudad_id": "1",
},
{
"o.ciudad_id": "122"
}
]
})
And check this: https://www.php.net/manual/es/mongodb-driver-bulkwrite.update.php because arrayFilter
is an element in the options.
[
"_id" => new \MongoDB\BSON\ObjectId($ruta_id)
],
[
'$set' => [
"destinos.$[d].origenes.$[o].base_price" => 450
]
],
[
"arrayFilters" =>
[
["d.ciudad_id" => "1"],["o.ciudad_id" => "122"]
]
]
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.