【发布时间】:2019-08-28 05:46:28
【问题描述】:
我有一个自动完成输入,我想通过_id、name 或email 查找用户。
此查询运行良好,但它只使用姓名或电子邮件进行搜索:
var matchRegexp = new RegExp(_.escapeRegExp(req.query.match), 'i');
User.find(
{$or: [{email: matchRegexp}, {name: matchRegexp}]},
{email: 1, name: 1, _id: 0}
).limit(limitResults).exec(
function(error, users) {
if (error) {
return res.status(400).json({
"message": "Query failed",
});
} else {
return res.json({
"results": users
});
}
}
);
如果我尝试在$or 添加_id,则无法通过name 或email 进行搜索,但它适用于_id:
{$or: [{email: matchRegexp}, {name: matchRegexp}, {_id: req.query.match}]}
如何使用所有 3 个选项让它工作?
编辑:
这是错误:
CastError: 路径“_id”处的值“ayeye”转换为 ObjectId 失败 模型“用户”
根本没有考虑姓名和电子邮件...
【问题讨论】:
-
对我来说它的工作。您能否出示一些条件不合格的文件
-
@AnthonyWinzlet 感谢您的调试...对我来说,它触发了我刚刚发布的错误。
-
stackoverflow.com/a/25798043/6322587 应该会有所帮助!