Mongoose的$或条件查找方法无法正常工作

最近我开始使用MongoDB和Nodejs上的Mongoose。

当我使用$or condition和_id字段的Model.find方法时,Mongoose无法正常工作。

这不起作用:

 User.find( { $or:[ {'_id':param}, {'name':param}, {'nickname':param} ]}, function(err,docs){ if(!err) res.send(docs); }); 

顺便说一句,如果我删除'_id'部分,这是否工作!

 User.find( { $or:[ {'name':param}, {'nickname':param} ]}, function(err,docs) { if(!err) res.send(docs); }); 

而在MongoDB shell中,两者都正常工作。

我通过Googlesearch解决了这个问题:

 var ObjectId = require('mongoose').Types.ObjectId; var objId = new ObjectId( (param.length < 12) ? "123456789012" : param ); // You should make string 'param' as ObjectId type. To avoid exception, // the 'param' must consist of more than 12 characters. User.find( { $or:[ {'_id':objId}, {'name':param}, {'nickname':param} ]}, function(err,docs){ if(!err) res.send(docs); }); 

根据mongoDB文档:“…也就是说,对于MongoDB使用索引来评估$或expression式,$或expression式中的所有子句必须由索引支持。

所以添加您的其他领域的索引,它将工作。 我有一个类似的问题,这解决了它。

你可以在这里阅读更多: https : //docs.mongodb.com/manual/reference/operator/query/or/