mọi người. Tôi yêu manga. Và bây giờ tôi đang học cách yêu mongo :-)MongoDB: Sử dụng lưu() để cập nhật tài liệu hiện có trong bộ sưu tập
Có giải thích về how to use save() to update an existing document in a collection in MongoDB PHP? nhưng tôi không thể áp dụng nó để "thực tế" của 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"}
Đây là mã thử nghiệm của tôi:
<?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);
?>
Thực tế là trong ví dụ PHP save() ghi đè các đối tượng trong khi trong ví dụ JS nó cập nhật nó. Tôi ước tôi có thể tái tạo trong PHP giống như trong JS.
Xin cảm ơn trước.
Trong http://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations người ta nói rằng "save() thực hiện lệnh upsert nếu x có trường _id (x là một đối tượng kiểu JSON và upsert có nghĩa là cập nhật nếu có; chèn nếu thiếu) ". – Roger
Tôi không thấy vấn đề là gì, không phải ví dụ JS và PHP cũng làm như vậy? Cho chúng tôi biết bạn đang mong đợi điều gì. Đừng mong đợi chúng tôi thiết lập môi trường và chạy mã của bạn chỉ để xem đầu ra. – Theo
Cảm ơn bạn đã trả lời. Nếu bạn chạy ví dụ php, bạn sẽ thấy rằng save() ghi đè lên đối tượng trong khi trong ví dụ JS nó cập nhật nó. Tôi ước tôi có thể tái tạo trong PHP giống như trong JS. – Roger