我一直在看像mongodb这样的问题:插入如果不存在,它给出了指向"upsert"行为的指针。但是,我希望只在没有找到某个键时创建对象,即
if ( $collection->findOne ( array ('key'=>'the_key') ) == NULL ) {
$collection->insert ( array ('key' => 'the_key', 'content' => 'the_content' );
} else {
// else don't touch it, so upsert would not fit.
}
我使用PHP mongodb驱动程序。上面的代码只是为了演示我的目的。然而,它缺乏所需的原子性。如何实现这一目标?
提前感谢!
由于无论如何都应该为这个键定义一个唯一索引,因此还可以使用它来防止多次插入具有该键的对象。查看索引文档:
http://www.mongodb.org/display/DOCS/Indexes Indexes-UniqueIndexes
不是一个很好的解决方案-在我看来-但我能想到的唯一的一个,如果你不想做更新或不能做任何原因。请记住,当尝试再次插入具有相同键的对象时,您可能会收到一个错误,您必须处理这个错误。