最近,我开始在Node.js上将MongoDB与Mongoose结合使用。
当我将Model.find方法与$or条件和_id字段一起使用时,猫鼬无法正常工作。
$or
_id
这不起作用:
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中,两者都可以正常工作。
我通过谷歌搜索解决了这个问题:
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); });