2016-01-23 85 views
1

我爲我的網站創建了一個註冊系統,該系統向註冊用戶發送確認電子郵件,其確認代碼是其帳號在貓鼬數據庫中的_id無法使用.update更新貓鼬屬性()

然後,回到我的網站,輸入自己的驗證碼,我想使用.update()方法將confirmed屬性的值從0在數據庫中的用戶更改爲1

這裏是我的代碼:

router.post('/confirmAcc',function(req, res, next) { 

    var getid=req.body.confirmcode; 
    console.log(getid); 
    var requis = { "_id": getid }; 

    User.update(requis, {confirmed: '1'}, function (err, doc){ 
    console.log(doc); 
    if (err) throw err; 
    }); 

    res.render('index', {title:'nDoto'}); 
}); 

的數據庫沒有問題相匹配的id,但它不會更新現有的「confirmed」屬性「1」。

我不知道爲什麼。

此外,當我運行的代碼,並把我的確認代碼和功能運行時,控制檯寫道:

{ ok: 0, n: 0, nModified: 0 }

+0

你是說如果你用上面的代碼中的查找代替更新,你會得到一個記錄? –

+0

實際上你的評論只是解決了我的問題。我決定不使用更新,而我只是使用findOne()。然後我使用了'doc.credentials.confirmed =「1」',並更新了!謝謝! – dec0mpiled

回答

1

我解決了這一問題。除了使用User.update()的,我用:

router.post('/confirmAcc',function(req, res, next) { 
var getid=req.body.confirmcode; 

var requis = { "_id": getid }; 

User.findOne(requis, function (err, doc){ 
    doc.credentials.confirmed="1"; 
    doc.save(); 
    if (err) throw err; 
}); 
res.render('index', {title:'nDoto'}); 
}); 

而且這個工作:)

1

不知道這是否會幫助,但我想說的是,更新方法有$集合運算符$set documentation。 。$ set操作符用指定的值替換字段的值。所以,如果你仍然想使用update()也許會有這樣的工作的:

db.catalog.update({"_id" : getid},{$set : {"confirmed" : "1"}})

這應該改變「證實」字段的值。

+0

這也可以。我現在意識到它最初沒有工作,因爲確認沒有引號。謝謝你的例子! – dec0mpiled