Tsuna
Tsuna

Reputation: 2198

querying mongodb collection for regex using mongoose

I am trying to query using regex for mongoose, I have seen other posts which have similiar suggestions but I still couldn't figure out, and also getting new errors instead of just getting a null document back.

I am trying to query value contains instead of the need of the exact to get results

for my route, I have something like this

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

can someone give me a hand where I have been doing wrong?

Thanks in advance for any help.

Upvotes: 0

Views: 525

Answers (1)

Ratan Uday Kumar
Ratan Uday Kumar

Reputation: 6502

Suppose below is your Model

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

Your router must be like below

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

You no need to give separate param for name just do query like above

Upvotes: 1

Related Questions