You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何使用MongoDB同文档另一字段的值更新指定字段

问题原因

该问题由两个错误共同导致:

  1. 只有使用聚合管道作为更新参数时,MongoDB才会将值中的$字段名解析为同文档的字段引用。你在Mongo Shell中第二个参数用[]包裹就是聚合管道的写法,但PHP代码中没有加这层外层数组,MongoDB会将操作识别为普通更新,直接把$product_name作为字符串写入。
  2. PHP的双引号字符串会自动解析$开头的内容为本地PHP变量,你最初写的"$product_name"会被PHP尝试读取当前作用域的$product_name变量,因此抛出未定义变量的Notice。

正确解决方案

将更新参数改为聚合管道写法,同时用单引号包裹$product_name避免PHP解析为本地变量即可,代码如下:

$where = array();
// $set外层套一层数组,表示这是聚合管道更新
$update = array(
    array(
        '$set' => array("product_name_copy" => '$product_name')
    )
);
$options = array("multi" => true);

$bulkWrite = new MongoDB\Driver\BulkWrite;
$bulkWrite->update($where,$update,$options);
$updated = $mongo->executeBulkWrite("$db_name.products", $bulkWrite);

注意:该聚合更新语法要求MongoDB服务端版本 >= 4.2,如果你使用的是更低版本的MongoDB,需要先查询出所有文档,再逐条遍历更新字段。

内容的提问来源于stack exchange,提问作者Nagaraj Juro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:39:00