如何在nodeJs上查询mongoose中的两个集合?

时间:2013-05-16 10:24:52

标签: node.js mongodb mongoose

我是nodeJs的新手,我必须从查询结果中查询表,我必须查询另一个表。我尝试了如下代码,但它只返回null。

 action(function getpositions(req){
 var namearray = [];
 NHLPlayerStatsDaily.find ({"created_at": {$gt: new Date(y+"-"+m+"-"+d)}}, function(err,position){
    if(!err)
    { 
    for (i=0;i< position.length; i++)
    {  
        var obj = JSON.stringify(position[i]);
        var pos = JSON.parse(obj);

        var p = pos["player_stats_daily"]["content"]["team_sport_content"]["league_content"]["season_content"]["team_content"]["team"]["id"]
        NHLTeam.find({"sdi_team_id": p}, "first_name nick_name short_name sport_id", function(err, team){
                 if (!err){
                    var obj = JSON.stringify(team);
                    var pos = JSON.parse(obj);
                    namearray.push(team)
                   }
            })
        }
      return send(namearray);
    }
      })
       })

如果我只是按“p”它会显示结果,当我在单独的函数中查询“NHLTeam”时它也会显示结果。在使用in collection查询集合时,它返回null。如何在mongoose中查询集合中的集合。提前致谢。

1 个答案:

答案 0 :(得分:1)

这不是查询问题,而是回调问题。在循环中的任何send(namearray)查询完成之前调用NHLTeam(请记住,这些查询的结果将异步传递给回调)。

你能做的就是这个(基本上跟踪所有回调完成时):

NHLPlayerStatsDaily.find ({"created_at": {$gt: new Date(y+"-"+m+"-"+d)}}, function(err,position){
  if(!err)
  { 
    var total = position.length;

    for (i=0;i< position.length; i++)
    {  
      var obj = JSON.stringify(position[i]);
      var pos = JSON.parse(obj);

      var p = pos["player_stats_daily"]["content"]["team_sport_content"]["league_content"]["season_content"]["team_content"]["team"]["id"]
      NHLTeam.find({"sdi_team_id": p}, "first_name nick_name short_name sport_id", function(err, team){
        total--;
        if (!err){
          var obj = JSON.stringify(team);
          var pos = JSON.parse(obj);
          namearray.push(team);
        }
        if(total == 0)
            send(namearray);
      })
    }

  }
})