代码之家  ›  专栏  ›  技术社区  ›  Tsuna

使用mongoose查询mongodb集合中的regex

  •  0
  • Tsuna  · 技术社区  · 6 年前

    我试图用 regex 对于 mongoose ,我已经看到其他的帖子有类似的建议,但我仍然无法理解,也得到了新的错误,而不是仅仅得到一个 null document 回来。

    我在试着 query 价值 contains 而不是需要确切的 results

    我的路线是这样的

    router.get('/:name/:value', (req, res, next) => {
      const o = {};
      const r = `.*${req.params.value}.*`;
      // the above gives me error such as CastError: Cast to string failed for value "{ '$regex': '.*y.*' }" at path "username" for model "Model"
    
      o[req.params.name] = { $regex: { $regex: r }, $options: 'i' };
      Model.find(o, (err, doc) => {
        if (err) return next(err);
        res.send('success');
      });
    });
    

    有人能帮我一下我做错了什么吗?

    提前谢谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ratan Uday Kumar coroutineDispatcher    6 年前

    假设下面是你的模型

    //Employee.js
    
    import mongoose from 'mongoose';
    const Employee = mongoose.Schema({
        Name: { type: String, default: "" },
        Age: { type: Number, default: 0 },
        Email: { type: String, default: "" },
    }, { collection: 'Employee' });
    export default mongoose.model('Employee', Employee);
    

    你的路由器必须如下

    var Employee = require('../path/to/Employee.js');
    
    router.get('/name/:value', (req, res, next) => {
        let query = {
            Name: {
                $regex: req.params.value,
                $options: "i"
            }
        };
        Employee.find(query, (err, docs) => {
            if (err) return next(err);
            console.log("Documents-->", docs)
            res.send('success');
        });
    });
    

    您不需要为名称指定单独的参数,只需执行上面这样的查询