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

Laravel操作MongoDB:如何向已有文档新增键值对

MongoDB修改已有文档(新增键值对)的正确实现

你当前使用的insert()方法是用来插入全新文档的,所以执行后会新增记录而非修改已有文档。要给id为34401的文档新增键值对,需要使用MongoDB的更新操作,结合$set操作符实现。

正确代码示例

先通过查询条件定位到目标文档,再用$set操作符将指定键值对添加到文档中:

// 根据文档实际id字段类型选择查询条件
// 若使用MongoDB默认的_id字段:
$condition = ['_id' => 34401];
// 若使用自定义的id字段:
// $condition = ['id' => 34401];

$data = [
    'id_project'            =>  $id_project, 
    'id_product'            =>  $product_id, 
    'link'                  =>  $link, 
    'id_product_competitor' =>  $id_competitor, 
    'link_competitor'       =>  ''
];

$update_result = DB::connection('mongodb')
    ->collection('products_' . $id_project . '_' . $id_competitor)
    ->update(
        $condition,
        ['$set' => $data],
        ['upsert' => false] // 仅修改已有文档,找不到时不新增
    );

关键说明

  • $set操作符:MongoDB官方字段更新操作符,可新增或更新文档指定字段,不会改动文档内其他原有字段。
  • 查询条件匹配:必须确保$condition精准定位目标文档,注意区分MongoDB自动生成的_id和自定义的id字段。
  • upsert参数:设为false时,仅找到匹配文档才执行更新;设为true时,找不到匹配文档会自动插入新文档,根据你的需求应设为false。

可选:使用updateOne()方法

如果只需更新匹配到的第一个文档,可使用updateOne(),语法更清晰:

$update_result = DB::connection('mongodb')
    ->collection('products_' . $id_project . '_' . $id_competitor)
    ->updateOne(
        $condition,
        ['$set' => $data]
    );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:25:31