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/