2014-09-12 89 views
0

嵌套文檔的自定義ID這是不行的,但希望這和標題滿口得到跨越條件UPSERT基於流星

function addToDB(account_id) 
{ 
    obj = {}; 
    if (!Accounts.findOne({account_id: account_id})) obj.createdAt = new Date().valueOf(); 
    obj.account_id = account_id; 
    Accounts.upsert({account_id: account_id}, {$set: obj}); 
} 

我需要使用ACCOUNT_ID代替的MongoDB點對象ID,所以它必須是可索引/唯一的。如果是更新,createdAt不應該改變。

更新,以便它工作在原有的範圍內,但我更喜歡我正確的答案評論的解決方案。

回答

2

我懷疑這是在事物的minimongo方面的支持,但你總是可以在服務器上實現的邏輯和發佈方法。但MongoDB的供給$setOnInsert操作者具有的當「更新插入」實際上插入一個新的文檔僅施加該值來執行更新的目的:

Accounts.upsert(
    { "account_id": obj.account_id }, 
    { 
     "$setOnInsert": { "created_at": new Date() }, 
     "$set": obj // account_id would be automatically added but it doesn't matter 
    } 

);

當然假設是obj尚未包含AA created_at領域,你需要的數據實際上是一個BSON「日期」類型,而不是一個劃時代的時間戳(BSON日期實際存儲作爲一個劃時代的時間戳內部反正),否則轉換爲使用.valueOf()如你的例子所示。

+0

,似乎工作。 :)'accounts.upsert({account_id:account_id},{$ setOnInsert:{'createdAt':new Date()。valueOf()},$ set:obj});'' – jiku 2014-09-13 04:17:11