如何将Express查询参数解析为mongodb regex查询?

时间:2019-08-07 15:47:20

标签: regex mongodb express

我尝试用express构建一个测试后端。 遇到了一个我似乎无法克服的问题。

试图给查询对象$ regex param一个来自req.query.name的值。但是它只返回一个空数组。当我console.log(laptopName)时,它输出作为查询参数给出的正确值。

如果我只是将$regex: laptopName替换为具体值$regex: 'vivobook',则可以得到结果。

使用$regex: laptopName console.log看起来像这样{ name: { '$regex': '"vivobook"', '$options': 'i' } }

使用$regex: 'vivobook' console.log时,如下所示:{ name: { '$regex': 'vivobook', '$options': 'i' } }

app.get("/api/v1/laptops", (req, res) => {
    MongoClient.connect(mongo_url, { useNewUrlParser: true }, (err, client) => {
        const db = client.db("laptop_backend");
        const collection = db.collection("laptops");


        let laptopName = req.query.name;

        let query = { 
            name: {
                $regex: laptopName,
                $options: 'i'
            }
        };

        collection
            .find(query)
            .toArray()
            .then(response => res.status(200).json(response))
            .catch(err => console.error(err));
    });
});

1 个答案:

答案 0 :(得分:0)

尝试直接从诸如以下的参数中获取笔记本电脑名称

let { name } = req.query;
let query = { 
            name: {
                $regex: name,
                $options: 'i',
            }
        };

如果您要完全修改,我建议您不做承诺就更改代码。

app.get("/api/v1/laptops", async (req, res) => {
  try {
    const client = await MongoClient.connect(mongo_url, { useNewUrlParser: true });
    const db = client.db('laptop_backend');
    const collection = db.collection('laptops');
    const { name } = req.query;
    const query = {
      name: {
        $regex: name,
        $options: 'i',
      },
    };
    const result = await collection.find(query);
    res.status(200).json({ result });
  } catch (e) {
    console.log(e);
    res.status(400).json({ error: true });
  }
});