2012-03-29 3 views
0

文書から情報を削除したいが、コードが実行され、エラーは発生しない。しかし、レコードは削除されない。 私は同じようモンゴDBコマンドを実行しますPHPを使ってmongodbをプルする方法

<? 
    $m=new Mongo(); 
    $db=$m->database; 
    $cond=array("id"=>'12345'); 
    $data=array('$pull'=>array("info.sno"=>2)); 
    //I used before this $data=array('$pull'=>array("info"=>array("sno"=>2))); 
    echo json_encode($data); 
    $db->info->update($cond,$data); 
    $st=$db->Command(array("getlasterror"=>1)); 
?> 

私のPHPコードIDを、私はその

{  
    "id": "12345", 
    "info": [ 
    { 
     "sno":1 
     "name": "XYZ", 
     "email": "[email protected]" 
    }, 
    { 
     "sno":2 
     "name": "XYZ", 
     "email": "[email protected]" 
    } 
    ]  
} 

のようなデータをhaaveと私はID = 12345のデータを削除したいとinfo.sno = 2:

db.info.update({"id":12345},{'$pull':{"info":{"sno":2}}}); 
+0

簡単な解説、シェルからのコマンドが機能しているので、PHPで書く方法を理解する必要があります。 –

+0

はいアダムC唯一の違いは正しいことです。私のIDは文字列で、私は整数としてIDを使用しました。私のfiel snoは整数で、文字列として使用しました。なぜ動作しませんでした。 .info.update({"id": "12345"}、{'$ pull':{"info":{"sno": "2"}}}); '正しい方法は' db.info 'です。 update({"id": "12345"}、{'$ pull':{"info":{"sno":2}}}); ' –

答えて

2

あなたのコメントアウト行が正しいです:

test> db.foo.findOne() 
{ 
    "_id" : ObjectId("4f74737cc3a51043d26f4b90"), 
    "id" : "12345", 
    "info" : [ 
      { 
        "sno" : 1, 
        "name" : "XYZ", 
        "email" : "[email protected]" 
      }, 
      { 
        "sno" : 2, 
        "name" : "XYZ", 
        "email" : "[email protected]" 
      } 
    ] 
} 
test> db.foo.update({"id":"12345"}, {"$pull":{info:{sno:2}}}) 
test> db.foo.findOne() 
{ 
    "_id" : ObjectId("4f74737cc3a51043d26f4b90"), 
    "id" : "12345", 
    "info" : [ 
      { 
        "sno" : 1, 
        "name" : "XYZ", 
        "email" : "[email protected]" 
      } 
    ] 
} 
関連する問題