简体   繁体   中英

How bind search values in mongodb with mongoose

I have the following code in my /search/:query route:

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

And is good, i can search for pretty much every data that i want, but only individually. What if i want search name + age, can i? Example: 'Leo 22'.

There is any way that mongoose help me with this?

UPDATE:

My problem is:

I have tables lists it titles, this title is the concatenation of 'eventName' and 'eventDate'.

Real examples of this fields:

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

Every week will be create 4 events. In some point, a user will search for an old event, and i believe that the user will search in this format:'EVENT NAME - EVENT DATE'..

So i need a way to bind this values in my controllers.

I'm no familiar with mongoose but in order to do that, you must have a way to bind your query param to the attribute you want to search. Otherwise, they wouldn't know Leo is name and 22 is age.

Ur path would be like search?name=:name&age=:age&event=:event and in your code, you will have to process like if the param is not null , add and condition to it.

It seems you are using only one parameter ( req.param.query ) to filter all attributes. That's not mongoose related: you could create distinct parameters for each attribute and pass them along the query string.

For instance:

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

And your HTTP request will be like this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM