如何使用Nodejs在MongoDB中创建类似%keyword%的查询

时间:2017-03-30 12:54:41

标签: mongodb angular mongoose mean-stack

我正在研究MEAN应用程序并希望实现搜索过滤器。我在下面的路线中传递搜索关键字,如下所示

router.route("/places/search/:keyword")
    .get(function (req, res) {

        query = {};
        if (req.params.keyword !== undefined) {
            query = {
                name: { '$regex': new RegExp("^" + req.params.keyword.toLowerCase(), "i") }
            };
        }
        var response = {};
        Place.find(query, function (err, data) {
            if (err) {
                response = { "error": true, "message": "Error fetching data" };
            } else {
                response = { "error": false, "message": data };
            }
            res.json(response);
        });
    });

上面的代码正在执行keyword%之类的搜索,它返回所有以name开头的地方,但是我希望获取name包含keyword的所有地方开始,中间或结尾,类似MySQL中的%keyword%

2 个答案:

答案 0 :(得分:2)

router.route("/places/search/:keyword")
    .get(function (req, res) {

        query = {};
        if (req.params.keyword !== undefined) {
            query = {
                name: new RegExp(req.params.keyword, 'i')
            };
        }
        var response = {};
        Place.find(query, function (err, data) {
            if (err) {
                response = { "error": true, "message": "Error fetching data" };
            } else {
                response = { "error": false, "message": data };
            }
            res.json(response);
        });
    });

答案 1 :(得分:0)

像 mongodb 和 node js 一样查询

getSearch(collection, Name) {
     
        var query =  new RegExp(Name,"i")
        
        return this.connect().then(db => {
            return db.collection(collection).find({ "title": query}).toArray();
          })