更新多维数组的值?

伊万·华雷斯(Ivan Juarez)

我想基于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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章