php - 更新嵌套数组中的单个字段值而不修改其他字段值?
问题描述
我正在尝试修改单个字段值,但是每当我这样做时,它会删除所有其他字段,只留下更新的字段,如何修改单个字段而不影响其他字段?到目前为止,这就是我正在做的事情:
//
$updateResult2 = $coll_rutas->updateOne(
/* LIMIT TO ROUTE ID */
[
"_id" => new \MongoDB\BSON\ObjectId($ruta_id)
],
/* UPDATE VALUE */
[
'$set' => [
'destinos.$[d]' => [
"horas" => "1",
"minutos" => "15",
"millas" => "150",
"orden" => "1",
"notas" => "demo notes",
],
],
],
/* WHERE FILTER */
[
"upsert" => true,
'arrayFilters' => [
['d.ciudad_id' => 47]
]
]
);
//var_dump($updateResult2); exit;
这是原始的 mongo 对象:
"destinos": [
{
"ciudad_id": "47",
"nombre_destino": "Salt Lake City, Utah",
"horas": "0",
"minutos": "0",
"millas": "0",
"orden": 1,
"notas": null,
"origenes": [
{
"ciudad_id": "45",
"nombre_origen": "Provo, Utah",
"orden": 1,
"notas": null,
"base_price": 0
}
]
}
],
随着我的更改,它会删除origenes数组、ciudad_id和nombre destino,这样就可以了:
"destinos": [
{
"horas": "1",
"minutos": "15",
"millas": "150",
"orden": "1",
"notas": "demo notes"
]
}
],
解决方案
使用此代码:
'$set' => [
'destinos.$[d]' => [
"horas" => "1",
"minutos" => "15",
"millas" => "150",
"orden" => "1",
"notas" => "demo notes",
],
]
您正在定位destinos.$[d]
元素并用新的数据结构替换其所有内容。
您需要使用 .(dot) 表示法来定位嵌套数组中的每个元素。这有点冗长,但这会起作用:
'$set' => [
'destinos.$[d].horas' => "1",
'destinos.$[d].minutos' => "15",
'destinos.$[d].millas' => "150",
'destinos.$[d].orden' => "1",
'destinos.$[d].notas' => "demo notes"
]
推荐阅读
- camera - 在 SwiftUI 中翻译相机的按钮文本(“取消”、“重拍”和“使用照片”)
- python - Json_Normalize,针对特定列中的嵌套列?
- python - 如何在 python 中使用 json 渲染带有 jinja2 的模板?
- javascript - 文本不会出现在 Babylon.js 的顶部
- iot - RPL 协议中有多个父级
- windows - Azure-Pipelines - 需要 Ctrl+C 或键入“y”结束的脚本
- ios - 在 SwiftUI/UIKit 中,工作表没有以演示模式关闭?
- swift - 不断收到错误'类型''的值没有成员''
- python - 在 Python 枕头中为图像添加黑色空间
- javascript - 在javascript中组合多个类似的功能