2013-12-08 2 views
0

문서를 업데이트하려고하는데 정확히 예기치 않은 오류가 발생합니다 (셸 업데이트가 제대로 작동 함). 필드가 업데이트되지 않습니다.MongoDB PHP 업데이트가 기존 문서의 오류를 반환합니다.

작동 :

$_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); 

RETURNS :

array(5) { ["updatedExisting"]=> bool(false) ["n"]=> int(0) ["connectionId"]=> int(9) ["err"]=> NULL ["ok"]=> float(1) } 

셸 명령이 작품 매력 :

당신이 PHP와 MongoDB를에 _id로 작업
db.movies.update({"title_en":"skyfall"}, {$set:{"title_en":"Skyfall"}}) 
+0

그러나 쉘 명령은 PHP 명령과 다릅니다. PHP에서는'_id'를 사용하지만 쉘에서는'title_en'을 사용합니다. 또한'$ _POST [ '_ id']'가 실제 ID로 설정되어 있습니까? –

+0

_id, title_en 및 기타 필드를 반환하도록 find()를 처리합니다. 그런 다음 숨겨진 양식 필드를 사용하여이 _id를 보관합니다. var_dump를 사용하여 모든 값을 검사했는데 문제가없는 것 같습니다. – jakubplus

+0

그리고'$ update = $ collection-> update (array ('title_en'=> $ _ POST [ 'title_en']), $ editMovie); –

답변

0

, 반드시 당신을 폼 응답을 MongoId() 객체로 랩핑하여 문자열을 MongoID로 다시 변환하십시오 :

$update = $collection->update(array('_id' => new MongoId($_POST['_id'])), $editMovie); 

즉, 양식 응답에서 ID를 가져 오는 경우 본질적으로 MongoID를 문자열로 "캐스팅"했으므로 다시 MongoID로 다시 캐스팅해야합니다.

기존 제목을 기반으로 업데이트하는 예에서 문자열 유형과 일치하므로 캐스팅이 필요 없습니다.

관련 문제