2012-03-29 7 views
0

Ich möchte Informationen aus einem Dokument löschen, aber der Code ausgeführt wird und kein Fehler auftritt. Aber es löscht den Datensatz nicht. ich Haave Daten wie dieWie Verwenden von Pull in Mongodb mit PHP

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

und ich möchte Daten löschen, wo id = 12345 und info.sno = 2 meine PHP-Code-ID

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

ich Mongo db Befehl wie laufen:

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

schnelle Klärung, der Befehl von der Shell funktioniert, so müssen Sie nur herausfinden, wie man es in PHP schreiben, richtig? –

+0

Ja Adam C Es ist richtig, der einzige Unterschied ist, dass meine ID eine Zeichenfolge ist und ich ID als eine ganze Zahl auch mein Feld sno ist Integer und ich habe es als eine Zeichenfolge, deshalb hat es nicht funktioniert Ich schrieb es wie 'db .info.update ({"id": "12345"}, {'$ pull': {"info": {"sno": "2"}}}); 'aber der richtige Weg ist' db.info. update ({"id": "12345"}, {'$ ziehen': {"info": {"sno": 2}}}; ' –

Antwort

2

Ihr Kommentar gesetzt Zeile korrekt ist:

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]" 
      } 
    ] 
}