2017-03-15 109 views
0

現有油田例如:更新MongoDB中

db.getCollection('user') 
    .update(
     { 
      "userDetails.username": "ky" 
     }, 
     { 
      "$set": 
        { 
        "active": false, 
        "admin": false, 
        "phone": "08432808" 
        } 
     }) 

在上面的代碼,如果文件不具有「活動」現場,MongoDB的將插入該字段爲您服務。我想在這種情況下得到一些錯誤信息作爲回報,我該如何做到這一點?

回答

1

你可以使用foreach實現這樣的事情,過濾要檢查什麼,然後再驗證,如果沒有拋出異常的財產是否存在。不能說我是這樣的粉絲,我寧願讓應用程序邏輯驗證記錄是否存在,並決定是否更新或執行其他操作。

db.user.find({"userDetails.username": "ky"}).forEach(function(doc){ 
    if (!doc.hasOwnProperty('active')){ 
     throw "No active property"; 
    } 
    else{ 
     db.user.update({ _id: doc._id }, { "$set": { "active": false }}) 
    } 
}) 
+0

謝謝。看起來有點麻煩,特別是當你有很多字段需要更新時。 – qed

+1

@qed是的,我不喜歡它,你不能只是建立在發現的要求?例如'db.user.update({「userDetails.username」:「ky」,active:{$ exists:true}},{「$ set」:{「active」:false}})'。你真的需要一個錯誤嗎? – rrrr