3

嗨,我是 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 中查询集合中的集合。提前致谢。

4

1 回答 1

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

  }
})
于 2013-05-16T11:11:42.713 回答