запросить коллекцию mongodb для регулярных выражений с помощью mongoose - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь сделать запрос, используя 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 Ответ

0 голосов
/ 29 июня 2018

Предположим, ниже указана ваша модель

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

Вам не нужно указывать отдельный параметр для имени, просто сделайте запрос, как указано выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...