我一直在研究像mongodb: insert if not exists这样的问题,这些问题指出了“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驱动程序。 上面的代码只是为了我的目的的演示。然而,缺乏所需的原子性。如何实现这一目标?
提前致谢!
答案 0 :(得分:3)
正如您应该为此键定义唯一索引一样,您也可以使用它来防止多次插入具有此键的对象。在以下位置查看索引文档:
http://www.mongodb.org/display/DOCS/Indexes#Indexes-UniqueIndexes
不是一个很好的解决方案 - imo - 但是我能想到的唯一一个,如果你不想做更新或者因为某种原因无法做到。请记住,当您尝试再次插入具有相同密钥的对象时,您可能会收到错误,这是您必须处理的。