我有以下几行:

            Score.find({gameId : gameId}).exec(function(err,obj){
                console.log("find length : " + obj.length);
            });

            Score.aggregate([
                {$match: {gameId: gameId}}
            ], function (err, result) {
                console.log('result is : ' + JSON.stringify(result));
                console.log('is there any error : ' + err);
            });

这些行的输出是
result is : []
is there any error : null
find length : 1

我不明白,为什么聚合的“匹配”方法无法按预期方式工作-查找所有具有匹配属性的文档。我添加了带有相同“body”的Score.find来查找文档是否确实存在并且确实存在。

PS:{gameId: gameId}-第一个gameId是属性的名称,第二个是我要查找的ID的字符串值。

PS2:流利的api具有相同的结果:
            Score.aggregate().match({gameId: gameId}).exec(function (err, result){
                console.log('result is : ' + JSON.stringify(result));
                console.log('is there any error : ' + err);
            });

最佳答案

您应该将gameId字符串转换为mongodb ObjectId

在 Mongoose
mongoose.Types.ObjectId(gameId)
mongodb native 方式
new ObjectId(gameId)

10-04 22:49