猫鼬查找失败或操作员失败

时间:2019-04-06 15:02:30

标签: node.js mongodb mongoose

我的输入具有自动完成功能,我想按_idnameemail查找用户。

此查询工作正常,但仅使用姓名或电子邮件进行搜索:

  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
        });
      }
    }
  );

如果我尝试在_id处添加$or,它将无法通过nameemail搜索,但可以与_id一起使用:

{$or: [{email: matchRegexp}, {name: matchRegexp}, {_id: req.query.match}]}

如何使用所有3个选项使其工作?

编辑:

这是错误:

  

CastError:对于路径“ _id”的值“ ayeye”,转换为ObjectId失败   型号“用户”

它根本不考虑姓名和电子邮件...

1 个答案:

答案 0 :(得分:1)

由于您的匹配字符串不是有效的ObjectId,因此出现此错误。

因此,您可以在此处首先检查有效ObjectId的验证,然后相应地制定标准。

const ObjectId = require('mongoose').Types.ObjectId

const criteria = { $or: [{ email: matchRegexp },{ name: matchRegexp }] }

If (ObjectId.isValid(matchRegexp)) {
  criteria.$or.push({ _id: matchRegexp })
}

User.find(criteria, { email: 1, name: 1, _id: 0 }).limit(limitResults).exec()