You*_*han 95 mongoose mongodb node.js
最近我开始在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);
});
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果我删除'_id'部分,这就行了!
User.find({
$or: [
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Run Code Online (Sandbox Code Playgroud)
而在MongoDB shell中,两者都能正常工作.
You*_*han 185
我通过谷歌搜索解决了它:
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);
});
Run Code Online (Sandbox Code Playgroud)
Gov*_*Rai 34
我恳请大家使用Mongoose的查询构建器语言并承诺而不是回调:
User.find().or([{ name: param }, { nickname: param }])
.then(users => { /*logic here*/ })
.catch(error => { /*error logic here*/ })
Run Code Online (Sandbox Code Playgroud)
阅读有关Mongoose查询的更多信息.
您还可以混合添加$or和and来为您的函数提供更多灵活性、选项和稳健性,如下所示:
var ObjectId = require("mongoose").Types.ObjectId;
var idParam = new ObjectId(param.length < 12 ? "123456789012" : param);
const {nameParam, nicknameParam, ageParam} = req.params || req.body || req.query
User.find({
$or: [{
_id: objId
},
{
name: nameParam
},
{
nickname: nicknameParam
}
],
$and: [{
age: ageParam
}]
},
function (err, docs) {
if (!err) res.send(docs);
}
);Run Code Online (Sandbox Code Playgroud)
因此,这意味着您的 find() 将查找 (_id = idParam OR name = nameParam ORnickname = NickParam) AND (age = AgeParam) 的所有用户
我希望这对那里的人有帮助。干杯!!!
| 归档时间: |
|
| 查看次数: |
107567 次 |
| 最近记录: |