我想基于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 : //www.php.net/manual/es/mongodb-driver-bulkwrite.update.php,因为它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"]
]
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句