2016-03-25 14 views
0

いくつかの集計記事を読みましたが、まだまだ短くなっています。MongoDB集約結果をパスに戻す

集約は、要素が文書内にあるかどうかをテストすることです。空の配列ではない結果を返す場合は、ボックスを「チェック」することがわかります。

これまでのコードと私が試したことのコメントがあります。

router.get("/challenge/:challengeId", requireLogin, function(req, res) { 

    var challengeId = req.params.challengeId; 

    var isSolved = function(challengeId){ 
     console.log("in the aggregation: ", challengeId); // returns challengeId 
     User.aggregate([ 
    //var isSolved = User.aggregate([ 
     { $match: {"solvedChallenges": { "challenge": challengeId } } }, 
     { $project: { 
      userName: 1 } 
     } 
     ], 
     function(err, results){ 
     console.log("this is the result: ", results); // logs a result if the there is one, and [] if there is no result. 
     return results; // Trying to pass the results back to the /challenge/:challengeID route. 
     }); 
    } 

    //line below should return something like: [] 
    // or [ { _id: 56f5544bc171b1b8663bb15f, userName: 'John' } ] 
    console.log("is solved is: ", isSolved(challengeId)); 
... 



}); 

私は結果を取得し、それらを変数に設定し、その変数が真実かどうかを確認しようとしています。真実ならば、ボックスをチェックして、偽の場合はそれをチェックしないようにします。

また、私が何かひどく間違っていると、私はフィードバックを受けたいと思います。

+0

質問は何ですか?コールバックの外に、シリアルの順序で発生すると思われるコードがあります。それはしません。結果コールバックの中にコードを置いてください。配列が空であるかどうかを確認する方法を真剣に尋ねていますか?これがあなたの質問です。さらに、 '$ match'と' $ project'を使う '.aggregate()'は必要ありません。目的に合わせて '.find()'を使用するか、 '.findOne({" solvedChallenges.challenge ":challengeId}、function(err、doc){...})'を使用するだけです。あなたのコードでよくある別のエラーを強調する必要があります。ここに問題が多すぎます。 –

答えて

1

User.aggregate()のコールバックで値を返すと、呼び出し元に返されません。だから、isSolved()は呼び出し元に値を戻すために第2引数としてコールバックを必要とします。このような何か:

router.get("/challenge/:challengeId", requireLogin, function(req, res) { 

    var challengeId = req.params.challengeId; 

    var isSolved = function(challengeId, callback){ // <<=== pass callback here 
     console.log("in the aggregation: ", challengeId); // returns challengeId 
     User.aggregate([ 
        //var isSolved = User.aggregate([ 
        { $match: {"solvedChallenges": { "challenge": challengeId } } }, 
        { $project: { 
         userName: 1 } 
        } 
       ], 
       function(err, results){ 
        console.log("this is the result: ", results); // logs a result if the there is one, and [] if there is no result. 
        callback(err, results); // <<=== call callback here to return 
       }); 
    }; 

    //line below should return something like: [] 
    // or [ { _id: 56f5544bc171b1b8663bb15f, userName: 'John' } ] 
    //console.log("is solved is: ", isSolved(challengeId)); 

    isSolved(challengeId, function(err, results) { 
     if (err) { 
      // return error here using res 
     } else { 
      // do something with results and 
      // return it using res 
     } 
    }); 
}); 
+0

本当に質問にお答えいただきありがとうございました。とても有難い! –

関連する問題