Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB php更新为现有文档返回错误_Php_Json_Mongodb - Fatal编程技术网

MongoDB php更新为现有文档返回错误

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['

我正试图准确地更新文档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['_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完成了这样的更新;