2011-10-31 56 views
2

我一直在寻找像mongodb: insert if not exists这样的问题,它给出了“upsert”行为的指针。 但是我预计,如果某些键没有发现,只有创建对象,即如何在mongodb中不存在某个键时插入文档

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驱动程序这一点。 上面的代码只是我的目的的演示。但是缺乏所需的原子性。这应该如何实现?

在此先感谢!

回答

3

正如你应该为这个键定义一个唯一的索引,你也可以用它来防止用这样的键多次插入对象。看一看索引文档超过在:

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

没有一个很好的解决方案 - IMO - 但唯一一个我能想到的,如果你不想做的更新或不能做什么无论出于何种原因。请记住,当尝试再次插入带有相同密钥的对象时,您可能会收到错误,您必须处理该对象。

+0

存储具有相同索引值的文档将会改变文档。但是,如果我不想存储文档,如果某些条件为真,如“如果存在文档X并且属性y = abc”,则不存储文档? – Adelin

相关问题