2017-01-22 124 views
1

最近我一直在研究一個認證系統,如果沒有給定ID的用戶存在,應該創建一個新用戶加載一個存在ID。我也已經想通了,你可以通過使用在導出的貓鼬模型中使用貓鼬綱要函數

User.count({_id: id}, function (err, count){ 
    if(count > 0){ 
     // User exists, continue with loading data 
    } else { 
     // User does not exist, create one 
    } 
    }); 

與用戶是導出的貓鼬型號mongoose.model('User', UserSchema);

在ID返回用戶是否存在與如果我創建了一個功能existsWithId(ID)我現在app.js,它會工作完全正常,但我想搬到這個功能我user.js的模型(其中包含貓鼬/ MongoDB的代碼(由前面提到的代碼工作完全正常事實判斷) ),以便我只爲特定的模型使用它。每當我嘗試這樣做,通過使用

UserSchema.statics.existsWithId = function(id) { 
    this.count({_id: id}, function (err, count){ 
    return count > 0; 
    }); 
} 

或類似的方法,但是,它要麼只返回不確定或錯誤,一旦我運行它,我app.js.內

注:對不起,如果這是一種簡單的甚至是愚蠢的問題,但我非常新考慮與貓鼬DB管理,而我有與JS一些經驗,我不完全是專業。

如果你們需要提供回答的問題,隨時問我,我會做到這一點額外的代碼。此外,我不能代表+解答,但我一直很欣賞「時間:)

回答

0

existsWithId異步方法返回一個值,你可以給一個回調它得到的結果類似下面:

UserSchema.statics.existsWithId = function(id, cb) { 
    this.count({ _id: id }, function(err, count) { 
     cb(err, count > 0); 
    }); 
} 

User.existsWithId("5882c3be5aad09028d4d8b46", function(err, res) { 
    console.log(res); 
}); 
+0

很好地工作,謝謝!一個問題,但。我並沒有真正理解Mongoose的整個「findByID」概念:我現在如何設置'user'對象到現有的對象(我嘗試了'user = User.findOne({_id:id});',但是) [編輯:我只記得,它是完全相同的東西(回調,arrgh)] – Maxx2709

+0

這是異步的,你可以用回調得到結果:'User.findOne({_id:id},函數(err,res){console.log(res); var user = res;});'。如果你不指定回調函數,它將不會執行,除非你調用exec(),請參閱:http://stackoverflow.com/questions/31549857/mongoose-what-does-the-exec-function-do –

+0

這,出於某種原因,只會返回我認爲類似於「存在」的布爾值。我可能在這裏有一個非常明顯的錯誤,但我現在似乎無法找到它。下面是該函數的完整代碼:http://pastebin.com/2FCXkrF4 – Maxx2709