2012-09-19 58 views
2

如何更新集合中的嵌入文檔或插入文檔如果不存在單個查詢? 假設我有如下文檔。 「記錄」是一組嵌入式文檔。MongoDB,如何更新集合中的嵌入式文檔或插入不存在的文檔?

{ 
    id: "1", 
    records: [ 
     {userId:"5", userData: "..."}, 
     {userId:"12", userData: "..."}, 
     {userId:"27", userData: "..."} 
    ] 
} 

我知道如何在單獨的查詢中插入或更新「記錄」。但是,我可以將這些查詢結合起來,以便它與MySQL的ON DUPLICATE KEY UPDATE類似嗎?我想避免執行另一個查詢來查明嵌入式文檔是否存在。

db.myCollection.update(
    {id:"1", records.userId:"12"}, 
    {records.$.userData:{"... new data ..."}} 
); 

db.myCollection.update(
    {id:"1"}, 
    {records: 
     {$push: 
      {userId: "33", userData: {"... new data ..."}} 
     } 
    } 
); 

感謝

+0

嗯,我確實有一個答案,但堆棧溢出決定將其轉換爲一個註釋。 –

+0

Hi Na.z.Camp,你是否仍然有指向這個'評論'的鏈接? – Jaepil

+0

http://stackoverflow.com/q/10277174 – JohnnyHK

回答

0
+0

嗨SCB,據我所知upsert並不適用於** embedded **文件。請注意我只想修改主文檔的「記錄」集。 – Jaepil

+0

你可以在update命令上使用/ * upsert */true的組合並使用位置運算符$? – SCB

+1

@SCB,MongoDB文檔說:「不要使用位置操作符$ with upsert操作,因爲插入將使用$作爲插入文檔中的字段名稱。」看到這裏:http://docs.mongodb.org/manual/reference/operator/positional/ – Kyle