2013-07-04 79 views
0

我是新來的貓鼬mongodb,並且正在嘗試更新存儲的數據。我在這裏嘗試了api中的示例:http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate,但似乎沒有做到正確。它說來查詢數據並更新它,我可以這樣做:更改貓鼬文檔中的數據

Model.findOne({ name: 'borne' }, function (err, doc) 
{ 
    if (err) .. 
    doc.name = 'jason borne'; 
    doc.save(callback); 
}); 

我這樣做:

user.find({ 'username': Username, 'code': Key}, function(err, check){ 
    var callback5; 
    if((String(check)) === "") 
    { 
     res.json('nope'); 
    } 
    else 
    { 
     banned: true; 
     user.save(callback5); 
     res.json('yep'); 
    } 
}) 

它返回結果的查詢數據,但是當我添加代碼來更新值布爾「禁止」的,我得到一個錯誤。我究竟做錯了什麼?

回答

4

我假設user變量是一個Model對象,並且您試圖實現的目標是找到具有給定用戶名和代碼的單個用戶,並將該用戶的禁用屬性設置爲true 。

的第一件事是,user.find將返回用戶的數組,而不僅僅是一個單一的用戶,所以你要使用user.findOne代替。

user.findOne({ username: Username, code: Key}, function(err, userDoc) { 
    if (err) 
    { 
     // TODO: Handle the error! 
    } 
    if (! userDoc) 
    { 
     res.json('nope'); 
    } 
    else 
    { 
     userDoc.banned = true; 
     userDoc.save(function (err) { 
      if (err) 
      { 
       // TODO: Handle the error! 
      } 
      res.json('yep'); 
     }); 
    } 
}) 

此查詢單個文檔的用戶名和密碼相匹配的數據庫。如果userDoc爲空,則將發生res.json('nope')

然後代碼將屬性userDoc設置爲true,然後將文檔保存回數據庫。由於save函數是異步的,因此您希望將res.json('yep')代碼放在回調函數中,否則您將不知道它是否實際發生。

我還沒有放入任何實際的錯誤處理代碼,我已經讓你做了,但是在使用標準回調模式時,你應該總是處理任何潛在的錯誤。


你也可以做到這一點使用findOneAndUpdate

var conditions = { username: Username, code: Key }; 
var update = { banned: true }; 
user.findOneAndUpdate(conditions, update, function (err) 
{ 
    if (err) 
    { 
     res.json('nope'); 
    } 
    else 
    { 
     res.json('yep'); 
    } 
})