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
相关产品推荐
相关产品推荐

