2016-10-02 1 views
1

Ich benutze MongoDB zusammen mit PHP. Ich möchte die ID des Dokuments erhalten, wenn sie existiert, oder ein neues Dokument einfügen und dann die ID des eingefügten Dokuments zurückgeben.Holen Sie sich die Dokument-ID, wenn sie existiert oder fügen Sie sie ein und geben die eingefügte Dokument-ID zurück, wenn sie nicht existiert

Meine tags Sammlung wie:

[ 
    { 
     "_id": "57b4e71b4535e71816816183", 
     "tag": "tag1" 
    }, 
    { 
     "_id": "57b4e71b4535e7181681612b", 
     "tag": "tag2" 
    } 
] 

möchte ich von Tag suchen und seine ID bekommen oder es einfügen, wenn nicht existiert. Kannst du mir bitte sagen, wie ich das machen kann?

Antwort

1

Sie können dies mit dem Betrieb findAndModify() Update, das die Optionen new und upsert Satz auf true hat. Die new-Option, die auf "True" festgelegt ist, gibt ein einzelnes Dokument mit den Änderungen zurück, die beim Update vorgenommen wurden.

Mit der angegebenen upsert Option auf true gesetzt, findAndModify() entweder ein neues Dokument erstellt, wenn keine Dokumente mit der Abfrage übereinstimmen oder aktualisiert ein einzelnes Dokument, das die Abfrage übereinstimmt.

Die folgende Mongo Mantel Beispiel soll dies verdeutlichen:

var doc = { "tag": "tag3" }; 
var retval = db.tags.findAndModify({ 
    "query": doc, 
    "update": { "$set": doc }, 
    "new": true, 
    "upsert": true 
});  
printjson(retval._id) 

Die äquivalente PHP code folgt:

$m = new Mongo; 
$col = $m->selectDB("test")->tags; 
$doc = array("tag" => "tag3"); 

$retval = $col->findAndModify(
    $doc, 
    array("$set" => $doc), 
    null, 
    array(
     "upsert" => true, 
     "new" => true, 
    ) 
); 

var_dump($retval); 
+1

das funktioniert .... vielen Dank –

Verwandte Themen