2017-03-15 85 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