使用Mongoose通过两种不同的数据类型查找

时间:2017-05-15 19:04:41

标签: node.js mongodb express mongoose

我希望能够通过用户名或ID在我的MongoDB中找到用户(使用Mongoose)。

使用:User.find({ $or: [ { _id: req.params.userId }, { username: req.params.userId } ]}, ...在我传递一个字符串时抛出错误:

  

对于模型\“User \”“

,路径\”_ id \“的对象\”用户名\“的转换为ObjectId失败

我理解为什么我会收到错误,但有一个简单的方法吗?

1 个答案:

答案 0 :(得分:1)

测试req.params.userId是否有效ObjectId,然后基于此汇总您的查询:

let query = {};
if (req.params.userId.match(/^[0-9a-fA-F]{24}$/)) {
    query._id = req.params.userId;
}
else {
    query.username = req.params.userId;
}
User.find(query, ...);