2011-01-23 57 views
6

我有以下形式的文件:MongoDB的 - 創建的文檔,如果不存在,否則推陣列

{ 
"_id" : ObjectId("4d2d8deff4e6c1d71fc29a07"), 
"user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0", 
"events" : [ 
     { 
       "profile" : 10, 
       "data" : "....." 
     } 
     { 
       "profile" : 10, 
       "data" : "....." 
     } 
     { 
       "profile" : 20, 
       "data" : "....." 
     } 
     ... 
    ] 
} 

我想有某種upsert聲明。如果已經存在這樣的文檔,需要在events數組中添加event,否則需要使用event項創建文檔。user_id

可以這樣做嗎?

回答

13

可以在蒙戈做upserts,請參閱 「Upserts與修飾語」 從Mongo doc

您可以UPSERT與修飾 操作使用。在這種情況下, 修改器將應用於 更新條件成員,並且 結果對象將被插入。

你需要看起來像查詢:

db.events.update({ "user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0" }, 
{ $push : { "events" : { "profile" : 10, "data" : "X"}}}, {"upsert" : true}); 
+1

也許我使用的是不同的版本,但僅作爲最後的更新參數它不工作真。我必須把{upsert:true}作爲參數。 – 2015-07-07 10:26:33