alle. Ich liebe Manga. Und jetzt lerne ich auch, Mongo zu lieben :-)MongoDB: Verwenden Sie save(), um ein vorhandenes Dokument in einer Sammlung zu aktualisieren
Gibt es eine Erklärung von how to use save() to update an existing document in a collection in MongoDB PHP? aber ich konnte es nicht auf die „Realität“ PHP gelten :-)
> var mongo = db.things.findOne({name:"mongo"});
> print(tojson(mongo));
{"_id" : "497dab624ee47b3a675d2d9c" , "name" : "mongo"}
> mongo.type = "database";
database
> db.things.save(mongo);
> db.things.findOne({name:"mongo"});
{"_id" : "497dab624ee47b3a675d2d9c" , "name" : "mongo" , "type" : "database"}
Hier ist mein Testcode:
<?php
$a=array('_id'=>'test_a','field1'=>'anything');
$b=array('_id'=>'test_a','field2'=>'anything else');
$m=new Mongo();
$c=$m->db->test;
$c->save($a);
$c->save($b);//overwrites the previous record
/*
//With update() it works fine
$filter=array('_id'=>'test_a');
$update=array('$set'=>array('field2'=>'anything else'));
$c->update($filter,$update);
//$c->save($filter,$update);//Also tried...
*/
$f=$c->find();
echo $f->count()." found \n";
$i=iterator_to_array($f);//mongo cursos iterator
$m->close();//disconnect mongo
print_r($i);
?>
Tatsache ist, dass in der PHP-Beispiel speichern() überschreibt das Objekt während Im JS-Beispiel wird es aktualisiert. Ich wünschte, ich könnte in PHP das gleiche wie in JS reproduzieren.
Vielen Dank im Voraus.
In http://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations heißt es, dass "save() ein upsert macht, wenn x ein _id Feld hat (x ist ein JSON style Objekt und upsert bedeutet update falls vorhanden; einfügen falls fehlend) ". – Roger
Ich sehe nicht, was das Problem ist, machen die JS- und PHP-Beispiele nicht dasselbe? Sagen Sie uns, was Sie erwarten. Erwarten Sie nicht, dass wir die Umgebung einrichten und Ihren Code ausführen, nur um die Ausgabe zu sehen. – Theo
Danke für die Antwort. Wenn Sie das PHP-Beispiel ausführen, sehen Sie, dass save() das Objekt überschreibt, während es im JS-Beispiel aktualisiert wird. Ich wünschte, ich könnte in PHP das gleiche wie in JS reproduzieren. – Roger