2016-06-27 4 views
0

Вот моя схема:Вложенный запрос в Монго DB

var playerScheme = new Schema({ 
    _id:String, 
    score:Number 
    } 

Im пытается получить ранг каждого игрока путем подсчета числа пользователей с большим количеством очков, чем пользователь в вопросе, скажем, пользователь X. Я получаю принят идентификатор пользователя x в параметре res. Я использую следующий запрос, но не могу определить, как вложить другой запрос на поиск после $ gt, чтобы получить оценку для игрока x.

Это мой код в узле с помощью Мангуст:

exports.getRankForUser = function(req,res) { 

    var userId = ObjectId(req.body.userId); 
    var rank; 

    playerModel.player.count({"score" :{$gt: GET SCORE FOR USERID QUERY}}) 
    .exec(function(err,result) 
    { 
     if(err) { 
     res.send(err ,500); 
     } else { 
     res.send(result,200); 
     } 
    } 
); 

} 

ответ

0

Во-первых, вы должны получить информацию пользователя X. После того, как у вас есть эта информация, вы можете выполнить запрос вложенного счета внутри первого обратного вызова, используя полученную информацию о пользователе X следующим образом:

exports.getRankForUser = function(req,res) { 

    var userId = ObjectId(req.body.userId); 
    var rank; 

    playerModel.player.findById(userId, function(err, user){ 
     if(err){ 
      res.send(err ,500); 
     }else if (!user){ 
      res.send('The requested user does not exist' ,404); 
     }else{ 
      //At this point, you have the user X info in the var "user". 
      //Just query the count with a nested query 
      playerModel.player.count({score: {$gt: user.score}}) 
      .exec(function(err, result){ 
       if(err) { 
        res.send(err ,500); 
       } else { 
        //Here you are returning the number of users that 
        //has a score value higher than the user X score. 
        res.send(result,200); 
       } 
      }); 
     } 
    }); 

}