いくつかの集計記事を読みましたが、まだまだ短くなっています。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));
...
});
私は結果を取得し、それらを変数に設定し、その変数が真実かどうかを確認しようとしています。真実ならば、ボックスをチェックして、偽の場合はそれをチェックしないようにします。
また、私が何かひどく間違っていると、私はフィードバックを受けたいと思います。
質問は何ですか?コールバックの外に、シリアルの順序で発生すると思われるコードがあります。それはしません。結果コールバックの中にコードを置いてください。配列が空であるかどうかを確認する方法を真剣に尋ねていますか?これがあなたの質問です。さらに、 '$ match'と' $ project'を使う '.aggregate()'は必要ありません。目的に合わせて '.find()'を使用するか、 '.findOne({" solvedChallenges.challenge ":challengeId}、function(err、doc){...})'を使用するだけです。あなたのコードでよくある別のエラーを強調する必要があります。ここに問題が多すぎます。 –