首页 > 解决方案 > 如何将 express 查询参数解析为 mongodb 正则表达式查询?

问题描述

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

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

如果我只是$regex: laptopName用一个具体的值替换,$regex: 'vivobook'我会得到结果。

使用 $regex: laptopNameconsole.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));
    });
});

标签: regexmongodbexpress

解决方案


尝试直接从参数获取笔记本电脑名称,例如

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

推荐阅读