0

のために約束を使用しています。各回答は質問に属し、回答には "question_id"が含まれています。Mongoosejsは、私は2つのコレクションを持っているループ

Answer.aggregate([ 
     { 
      $group: { 
       _id: '$question_id', 
       num_questions: { $sum: 1 }, 
      } 
     }, 
     { 
      $sort: { 
       'num_questions': -1 
      } 
     } 
    ]).then(function(answers) { 
     var result = []; 
     for(answer of answers) { 
      Question.findById(answer._id, function(err, question) { 
       result.push(question); 
      }); 
     } 
     console.log(result); 
     res.json({questions: result}); 
}); 

が、上記のコードで、私の結果が原因の非同期機構からnullになります。

は、私はほとんどの答えを持っている5つの質問を取得したいです。

はどのようにそれは私を成し遂げることができますか?

私が持っていたもう一つの問題は、集計クエリで、私は少なくとも一つの答えを持っている疑問を持つことができます。回答なしで質問を得るにはどうすればよいですか?

答えて

0
Answer.aggregate([ 
     { 
      $group: { 
       _id: '$question_id', 
       num_questions: { $sum: 1 }, 
      } 
     }, 
     { 
      $sort: { 
       'num_questions': -1 
      } 
     } 
    ]).then(function(answers) { 
     var result = []; 
     var count = 0; 
     for(answer of answers) { 
      Question.findById(answer._id, function(err, question) { 
     count++ 
       result.push(question); 
     if (count == 5) { 
     res.json({questions: result}); 
     } 
      }); 
     } 
     console.log(result); 
}); 
+0

あなたの要求は一つだけ質問を返します。どのように私は5を得ることができますか?ありがとう! 5. –

+1

@Trongラムファンティエット編集どうもありがとうございました。私の2番目の質問で私を助けてくれますか?何の答えもない質問についてどのように私はそれらを表示できますか? –

+0

ため –

0

良い方法はこれらの事であなたを助けQのような約束ライブラリを使用することでしょう。 Qで、それはすべての約束は(カウント変数を使用してのように)余分なペテンを使用せずに解決されるまで待つことは簡単です...

Answer.aggregate([ 
    { 
     $group: { 
      _id: '$question_id', 
      num_questions: {$sum: 1} 
     } 
    }, 
    { 
     $sort: { 
      'num_questions': -1 
     } 
    } 
]).then(function (answers) { 
    var promises = []; 
    for (answer of answers) { 
     promises.push(Question.findById(answer._id).exec()); 
    } 

    Q.all(promises).then(function(questions) { 
     res.json({'questions': questions}); 
    }); 
}); 
関連する問題