最近我开始在 Nodejs 上使用 MongoDB 和 Mongoose。
当我使用带有 $or
条件和 _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 中,两者都可以正常工作。
最佳答案
我通过谷歌搜索解决了:
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);
});
https://stackoverflow.com/questions/7382207/