【发布时间】:2011-01-01 12:35:17
【问题描述】:
大家。我爱漫画。现在我也在学习爱 mongo :-)
how to use save() to update an existing document in a collection in MongoDB PHP有解释吗?但我无法将其应用于 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"}
这是我的测试代码:
<?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);
?>
事实上,在 PHP 示例中 save() 覆盖了对象,而在 JS 示例中它更新了它。我希望我能像在 JS 中一样在 PHP 中重现。
提前致谢。
【问题讨论】:
-
在mongodb.org/display/DOCS/Updating#Updating-ModifierOperations 中,据说“如果 x 有一个 _id 字段,save() 会执行 upsert(x 是一些 JSON 样式对象,如果存在则 upsert 表示更新;如果缺少则插入)”。跨度>
-
我不明白问题出在哪里,JS和PHP示例不做同样的事情吗?告诉我们你期待什么。不要指望我们设置环境并运行您的代码只是为了查看输出。
-
感谢您的回复。如果您运行 php 示例,您将看到 save() 覆盖对象,而在 JS 示例中它会更新它。我希望我能像在 JS 中一样在 PHP 中重现。
-
嗨@Roger - 无需在标题后附加 [SOLVED],在列表中可以通过图形方式识别具有已接受答案的问题。
-
好吧,如果你这么想,我很抱歉。据我所知,该网站在 SEO 与 Scarp 的斗争中存在严重问题。在标题的某处加上 SOLVED 一词有助于解决这个问题。
标签: mongodb mongodb-php