好的,我以50種不同的方式嘗試了這段代碼後感到非常震驚。FindOne mongoose nodejs的返回值
所以我有樣品遊戲玩2v2,在每個遊戲架構的玩家都參考了用戶和他們的用戶名。
現在在遊戲中,我想從這些用戶那裏收集評價並相應地更新它們,這必須同時發生。
我似乎無法得到我的用戶對象(來自很久以前的Java,所以這些只是直接起來沒有意義)。
如果可能的話,我想擴大這個,所以一個巨大的嵌套一堆代碼是不是我要找的。
沒有進一步張口閉口:
gameSchema:
var gameSchema = mongoose.Schema({
teamA_player1: { type: String, ref: "userModel", required: true},
teamA_player2: { type: String, ref: "userModel", required: true},
teamB_player1: { type: String, ref: "userModel", required: true},
teamB_player2: { type: String, ref: "userModel", required: true},
teamA_score: { type: Number, required: true},
teamB_score: { type: Number, required: true},
author: { type: String, ref: "userModel", required: true},
verification: [{ type: String, ref: "userModel", required: true}],
verified: { type: Boolean},
timestamp: { type: Date}
});
userSchema:
var userSchema = mongoose.Schema({
username: { type: String, required: true, unique: true},
password: { type: String, required: true},
firstName: { type: String},
lastName: { type: String},
about: { type: String},
email: { type: String},
clubs: { type: [{type: ObjectId, ref: "clubModel"}]},
games: { type: [{type: ObjectId, ref: "gameModel"}]},
rating: { type: Number}
});
與我在我的gameController代碼的問題:
updateRating = function(game){
// The following code blob doesn't work and calling a_1.rating just gives Nan/undefined.
var a_1 = users.findOne({username: game.teamA_player1});
var a_2 = users.findOne({username: game.teamA_player2});
var b_1 = users.findOne({username: game.teamB_player1});
var b_2 = users.findOne({username: game.teamB_player2});
var a_rating_old = (a_1.rating+a_2.rating)/2;
var b_rating_old = (b_1.rating+b_2.rating)/2;
var a_rating_new = 0;
var b_rating_new = 0;
if(game.teamA_score>game.teamB_score){
a_rating_new = ratingChange(a_rating_old, b_rating_old, true);
b_rating_new = ratingChange(b_rating_old, a_rating_old, false);
}else{
a_rating_new = ratingChange(a_rating_old, b_rating_old, false);
b_rating_new = ratingChange(b_rating_old, a_rating_old, true);
}
var a_rating_change = a_rating_new - a_rating_old;
var b_rating_change = b_rating_new - b_rating_old;
a_1.rating += Math.round(a_rating_change * (a_rating_old/a_1.rating));
a_2.rating += Math.round(a_rating_change * (a_rating_old/a_2.rating));
b_1.rating += Math.round(b_rating_change * (b_rating_old/b_1.rating));
b_2.rating += Math.round(b_rating_change * (b_rating_old/b_2.rating));
a_1.save();
a_2.save();
b_1.save();
b_2.save();
}
所以基本上我m w想知道在這裏獲取我的用戶的正確方法,提取他們的評分,更新它,然後用新評分保存用戶(遊戲本身不會發生任何改變)。
代碼也都可以在這裏找到:https://github.com/mathieudevos/pinkiponki
這限制了我的A_1在函數中,使我無法使用它的外函數(err,user){// code and var goes here}。 我想揭示它到我的updateRating函數,與收視率一起工作並在那裏更新它們。 –
您需要在外部聲明變量。 –