2011-10-31 81 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

相關問題