Mongo DB中的嵌套查询

时间:2016-06-27 21:39:12

标签: node.js mongodb mongoose

这是我的架构:

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

我试图通过计算比有问题的用户更多积分的用户数来获得每个玩家的等级,例如用户X.我在res参数中传递了x的用户ID。我使用以下查询,但无法弄清楚如何在$ gt之后嵌套另一个查找查询以获得玩家x的分数。

这是使用Mongoose的节点中的代码:

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

}

1 个答案:

答案 0 :(得分: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);
              }
          });
      }
  });

}