MongoDB php更新为现有文档返回错误
我正试图准确地更新文档1字段,但遇到意外错误,shell更新工作正常。未更新任何字段 操作:MongoDB php更新为现有文档返回错误,php,json,mongodb,Php,Json,Mongodb,我正试图准确地更新文档1字段,但遇到意外错误,shell更新工作正常。未更新任何字段 操作: $_POST['title_en'] = 'skyfall'; $editMovie = array('$set'=>array('title_en'=>$_POST['title_en'])); //JSON: {"$set":{"title_en":"Skyfall"}} $update = $collection->update(array('_id'=>$_POST['
$_POST['title_en'] = 'skyfall';
$editMovie = array('$set'=>array('title_en'=>$_POST['title_en']));
//JSON: {"$set":{"title_en":"Skyfall"}}
$update = $collection->update(array('_id'=>$_POST['_id']), $editMovie);
返回:
array(5) { ["updatedExisting"]=> bool(false) ["n"]=> int(0) ["connectionId"]=> int(9) ["err"]=> NULL ["ok"]=> float(1) }
SHELL命令的工作方式很有魅力:
db.movies.update({"title_en":"skyfall"}, {$set:{"title_en":"Skyfall"}})
使用PHP在MongoDB中使用_id时,请确保使用MongoId对象包装表单响应,以将字符串转换回MongoId:
$update = $collection->update(array('_id' => new MongoId($_POST['_id'])), $editMovie);
换句话说,当您从表单响应中获取id时,实际上已经将MongoID转换回字符串,因此需要再次将其“反转换”回MongoID
在基于现有标题进行更新的示例中,根据字符串类型进行匹配,因此不需要强制转换。但是shell命令与PHP命令不同。您在PHP中使用的是_id,但在shell中使用的是title_en。另外,您确定$\u POST[''u id']已设置为实际id吗?我处理find以返回\u id、title\u en和其他字段。然后我使用隐藏表单字段来保存这个_id。我已经用var_dump检查了所有值,看起来还可以。您是否尝试过$update=$collection->updatearray'title_en'=>$\u POST['title_en'],$editMovie;?我已经成功地用:$update=$collection->updatearray\u id=>newmongoid$\u POST[''u id'],$editMovie完成了这样的更新;