2015-01-08 66 views
0

所以,首先我想借口,如果我的問題會很愚蠢,我在node.js/mongodb/etc中的經驗很低。 我有我的證件的下一個架構在MongoDB中:MongoDB和Mongoose的奇怪行爲

var schema = new mg.Schema({ 
    token: { type: String, required: true }, 
    lastLog: { type: Date, default: Date.now() } 
}); 
var User = mg.model('users', schema); 

我試圖找到提交給美國令牌的所有文件等於托克,如果不能找到任何文件 - 創建它,或者如果有文件 - 更新它的lastLog字段。

User.find({ token: tok }, function (err, docs) { 
    if (err) util.error('error: ', err); 
    else { 
     if (docs && docs.length == 0) { 
      var u = new User({ token: tok }); 
      u.save(); 
     } 
     else User.update({ token: tok }, { $set: { lastLog: Date.now() } }); 
    } 
}); 

但是,我得到奇怪的錯誤(對我來說)在行:

 u.save(); 

「錯誤:參數傳遞中必須是12個字節的單一字符串或24個十六進制字符的字符串,在新的ObjectID。「

我不明白爲什麼它出現在這裏,'因特網中的所有例子都沒有人有同樣的錯誤。 感謝您的回答!

+0

看到http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate – generalhenry

+1

該錯誤消息沒有任何意義,除非你有一個ObjectID字段在用戶模式中,你不顯示。 – JohnnyHK

回答

0

請嘗試如下;

var u = new User(); 
u.token = tok; 
u.save(function(err) { 
    if (err) handleError(err); 
}