如何将 mongodb 中的搜索值与 mongoose 绑定

How bind search values in mongodb with mongoose

我的 /search/:query 路由中有以下代码:

var param = {
    query: req.query['query']
}

MyModel.find({
        "$or": [
            { 'name': req.param.query },
            { 'age': req.param.query  },
            { 'event': req.param.query },
        ]
    }, function (err, results) {
        if (err) {
            console.log(err)
        }
        else {
            res.render('index', { 
                data: results
            });
        }
    }
);

很好,我可以搜索几乎所有我想要的数据,但只能单独搜索。如果我想要搜索姓名+年龄怎么办?示例:'Leo 22'.

猫鼬有什么办法可以帮助我吗?

更新:

我的问题是:

我有表格列出它的标题,这个标题是 'eventName' 和 'eventDate' 的串联。

该字段的真实示例:

'Special Event - 20/12/2015' 'Classic Event - 12/03/2015' 'Hot Summer Event - 05/07/2005'

每周将创建4个活动。在某些时候,用户会搜索一个旧事件,我相信用户会以这种格式搜索:'EVENT NAME - EVENT DATE'..

所以我需要一种在我的控制器中绑定这些值的方法。

我对 mongoose 不熟悉,但要做到这一点,您必须有办法将查询参数绑定到要搜索的属性。否则,他们不会知道 Leo 是姓名,22 是年龄。

你的路径就像 search?name=:name&age=:age&event=:event 并且在你的代码中,如果参数不是 null,你将不得不处理,添加并条件化它。

您似乎只使用一个参数 (req.param.query) 来过滤所有属性。这与猫鼬无关:您可以为每个属性创建不同的参数并将它们沿查询字符串传递。

例如:

"$or": [
        { 'name': req.param.name },
        { 'age': req.param.age  },
        { 'event': req.param.event },
    ]

您的 HTTP 请求将是这样的:

http://youraddress/expressRoute?name=Leo&age=22