如果mongodb中不存在某个键,如何插入文档

时间:2011-10-31 13:54:31

标签: php mongodb nosql

我一直在研究像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驱动程序。 上面的代码只是为了我的目的的演示。然而,缺乏所需的原子性。如何实现这一目标?

提前致谢!

1 个答案:

答案 0 :(得分:3)

正如您应该为此键定义唯一索引一样,您也可以使用它来防止多次插入具有此键的对象。在以下位置查看索引文档:

http://www.mongodb.org/display/DOCS/Indexes#Indexes-UniqueIndexes

不是一个很好的解决方案 - imo - 但是我能想到的唯一一个,如果你不想做更新或者因为某种原因无法做到。请记住,当您尝试再次插入具有相同密钥的对象时,您可能会收到错误,这是您必须处理的。