0

在下面的 Mongodb 查询中,我的 $divide 表达式中的“正确”和“guessCount”得到了“未定义”。我该如何纠正?我的意图是返回一个标记为“准确度”的百分比,该百分比是正确猜测的总和除以猜测的数量的结果。从提供的代码中应该可以很清楚地看到这一点。

guessCollection.aggregate( { $group :
                     { _id : "$imageFileName",
                       correct : { $sum : "$correct" },
                       guessCount: {$sum: 1 },
                       accuracy: {$divide: [correct, guessCount]}, //guess and guessCount are undefined
                        } },
                   { $match : {guessCount : { $gte : 50 }, user: user, language: language } } ,
                   { $sort: { guessCount: -1 } }, callback)
4

1 回答 1

3

$divide$project运算符,而不是$group运算符,因此您需要改为:

guessCollection.aggregate( { $group :
    { _id : "$imageFileName",
       correct : { $sum : "$correct" },
       guessCount: {$sum: 1 }
    } },
    { $match : {guessCount : { $gte : 50 }, user: user, language: language } } ,
    { $project : {
        correct: 1,
        guessCount: 1,
        accuracy: {$divide: ['$correct', '$guessCount']}
    }},
    { $sort: { guessCount: -1 } }, callback)

您的下一个问题可能是您引用了languageanduser中的字段,$match因为您没有包括那些在您的字段中,$group因此您可能希望将该部分移动到管道的开头,如下所示:

guessCollection.aggregate(
    { $match : { user: user, language: language } } ,
    { $group : { 
        _id : "$imageFileName",
        correct : { $sum : "$correct" },
        guessCount: {$sum: 1 }
    } },
    { $match : {guessCount : { $gte : 50 } } } ,
    { $project : {
        correct: 1,
        guessCount: 1,
        accuracy: {$divide: ['$correct', '$guessCount']}
    }},
    { $sort: { guessCount: -1 } }, callback)
于 2012-12-15T21:15:16.297 回答