更新多维数组上的值?

问题描述 投票:0回答:1

我想基于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"
                }
            ]
        }
    ]
}
php arrays mongodb
1个回答
1
投票
arrayFilters正常工作,我用您的对象示例进行了测试。

db.getCollection('temp').update({}, { $set: { "destinos.$[d].origenes.$[o].base_price":450 }, }, { arrayFilters: [ { "d.ciudad_id": "1", }, { "o.ciudad_id": "122" } ] })

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.