在mongoose中使用$match对id失效的解决方法

时间:2021-04-01 02:36:19
    Topic.aggregate(
    //{$match:{_id:"5576b59e192868d01f75486c"}}, //not work
    //{$match:{title:"test"}},
        //{$match:{_id:new mongoose.schema.Types.ObjectId(id)}}, //not work
    {$match:{_id:new mongoose.Types.ObjectId(id)}},
    ...
    function(err,res){
       ...
    });

在使用mongoose的聚合时一定要注意,在id列上使用$match会有个小问题,参考上面的代码,{$match:{_id:"5576b59e192868d01f75486c"}}这句话不起作用,但数据库中明明有对应的文档,改为其他列(比如:title)就没问题,但有时就需要使用id列,这时需要这样写{$match:{_id:new mongoose.Types.ObjectId(id)}},经查阅,mongoose中有两个地方定义了ObjectId,mongoose.schema.Types.ObjectIdmongoose.Types.ObjectId,在这里只有后面那种才起作用。