【问题标题】:How to insert a document if certain key not exists in mongodb如果mongodb中不存在某些键,如何插入文档
【发布时间】:2011-12-18 18:33:04
【问题描述】:

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

提前致谢!

【问题讨论】:

    标签: php mongodb nosql


    【解决方案1】:

    因为无论如何你都应该为这个键定义一个唯一索引,你也可以使用它来防止多次插入带有这样一个键的对象。在以下位置查看索引文档:

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

    不是一个好的解决方案——imo——但我能想到的唯一一个,如果您不想进行更新或出于任何原因无法进行更新。请记住,在尝试再次插入具有相同键的对象时,您可能会收到一个错误,您必须处理该错误。

    【讨论】:

    • 存储具有相同索引值的文档将改变文档。但是,如果某些条件为真,例如“如果文档 X 存在并且它的属性 y=abc”,则我不想存储文档怎么办?
    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 2016-08-04
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    相关资源
    最近更新 更多