2017-10-05 102 views
1

我試圖在MEAN中執行CRUD操作。我正在嘗試使用documentid更新整個文檔。我不知道如何做到這一點。下面是我的代碼:使用DocumentID更新整個MongoDB文檔

Users.prototype.updateUser = function (req, cbk) { 
    var self = this; 
    var reqObj = req.body; 
    var response = { 
     status: false, 
     err: null, 
     data: null 
    }; 
    console.log(new Date() + " | user update ", reqObj) 
    self.db.collection('users').update({_id:ObjectId(reqObj._id)}, {upsert:true}, function (err, result) { 
     if (!err && result.length > 0) { 
      response['status'] = true; 
      response['data'] = result; 
      cbk(response) 
     } else { 
      response['err'] = 'No user found!'; 
      cbk(response) 
     } 
    }); 
}; 

的JSON請求我想送的是:

{ 
    "_id": "59d5db3c4c46e83a14b94617", 
    "name": "hello", 
    "ind": "0" 
} 

我總是找不到響應用戶。任何想法我做錯了什麼?

編輯:

下面是用戶列表JSON響應:

{ 
    "status": true, 
    "err": null, 
    "data": [ 
     { 
      "_id": "59d5db344c46e83a14b94616", 
      "name": "test" 
     }, 
     { 
      "_id": "59d5db3c4c46e83a14b94617", 
      "name": "hello" 
     } 
    ] 
} 

回答

1

從技術文檔你缺少更新對象。

collection.update(criteria, update[[, options], callback]);

self.db.collection('users') 
    .update({ _id: ObjectId(reqObj._id) }, reqObj, { upsert: true }, 
    function (err, result) { 
    if (err) { response['err'] = err.message; } 
    else { 
     response['status'] = true; 
     response['data'] = result; 
    } 
    cbk(response); 
    }, 
); 

如果您還沒有對象,它會創建一個新的文件。

+0

我按照你的說法改變了它。但仍然沒有找到用戶。請檢查我編輯的問題。我正在發送正確的文檔ID。 – JackSlayer94

+1

重構了一下代碼,現在調試會比較容易,你應該得到正確的用戶或者一個好的錯誤信息,以便調試你的代碼,以便調試 –

+0

「{status}」:false, 「err」:「_id字段不能從{_id:ObjectId('59d5db3c4c46e83a14b94617')}更改爲{_id:\「59d5db3c4c46e83a14b94617 \」},「 」data「:null }'它試圖更新id。 – JackSlayer94