2016-06-27 4 views
0

여기 내 스키마입니다 :중첩 된 쿼리 DB

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

임 해당 사용자보다 더 많은 포인트와 사용자의 수를 계산하여 각 선수의 순위를 얻기 위해 노력하고, 사용자 X. 내가 전달받을 말한다 res 파라미터의 x의 유저 ID 다음 쿼리를 사용하지만 플레이어 x에 대한 점수를 얻으려면 $ gt 후에 다른 찾기 쿼리를 중첩하는 방법을 알아낼 수 없습니다.

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); 
       } 
      }); 
     } 
    }); 

}