2013-05-16 2 views
3

안녕하세요, nodeJs에 새로 왔습니다. 쿼리 결과에서 테이블을 쿼리해야하므로 다른 테이블을 쿼리해야합니다. 나는 다음과 같이 코드를 시도했지만 null 만 반환합니다.nodeJs에서 몽구스로 두 개의 콜렉션을 쿼리하는 방법은 무엇입니까?

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"은 별도의 함수로 쿼리 할 때 결과도 표시됩니다. 컬렉션에서 컬렉션을 쿼리 할 때 null을 반환합니다. 몽구스 컬렉션의 컬렉션을 쿼리하는 방법. 미리 감사드립니다.

답변

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

    } 
}) 
+0

1000000000 덕분에 ..., 나중에 지금은 이해했다. – God

관련 문제