좋아, 나는이 코드를 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) {// 코드와 var는 여기에있다}. 내 updateRating 함수에이를 공개하고 거기에서 등급을 사용하여 업데이트하려고합니다. –
변수를 외부에 선언해야합니다. –