tutti. Adoro i manga. E ora sto imparando ad amare anche mongo :-)MongoDB: utilizzare save() per aggiornare un documento esistente in una raccolta
C'è una spiegazione di how to use save() to update an existing document in a collection in MongoDB PHP? ma non ho potuto applicarlo alla "realtà" del PHP :-)
> 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"}
Ecco il mio codice di prova:
<?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);
?>
Il fatto è che l'esempio PHP save() sovrascrive l'oggetto mentre nell'esempio JS lo aggiorna. Vorrei poter riprodurre in PHP lo stesso di JS.
Grazie in anticipo.
In http://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations si dice che "save() fa un upsert se x ha un campo _id (x è un oggetto stile JSON e upsert significa aggiornamento se presente, inserire se mancante) ". – Roger
Non vedo quale sia il problema, gli esempi JS e PHP non fanno la stessa cosa? Dicci cosa stai aspettando. Non aspettarti che configuriamo l'ambiente ed eseguiamo il tuo codice solo per vedere l'output. – Theo
Grazie per la risposta. Se esegui l'esempio php, vedrai che save() sovrascrive l'oggetto mentre nell'esempio JS lo aggiorna. Vorrei poter riprodurre in PHP lo stesso di JS. – Roger