Mongoose search multiple fields

Viewed 7080

All,

Trying to implement simple search with NodeJS and Mongoose.

Not really sure where do I go wrong, trying to build up the query like so:

const query = Post.find();
if (value.searchQuery && value.city && value.category) {

        console.log("city and category");
        query.where({
            $or: [{ title: value.searchQuery }, { description: value.searchQuery }],
            city: value.city,
            category: value.category
        });

    } else if (value.searchQuery && value.city && !value.category) {

        console.log("No category");
        query.where({
            $or: [{ title: value.searchQuery }, { description: value.searchQuery }],
            city: value.city
        });

    } else if (value.searchQuery && value.category && !value.city) {

        console.log("No city");
        query.where({
            $or: [{ title: value.searchQuery }, { description: value.searchQuery }],
            category: value.category
        });

    } else if (value.searchQuery && !value.city && !value.category) {

        console.log("No city and no category");
        query.where({
            $or: [{ title: value.searchQuery }, { description: value.searchQuery }]
        });

Basically, what I have is search field, with city and category filters and user can either search by one field (city, category or searchQuery) or by all or just two.

P.s I'm relatively new to mongoose so take it easy ;)

Thank you!

1 Answers

Please try this query

   let regex = new RegExp(value.searchQuery,'i');
   { $and: [ { $or: [{title: regex },{description: regex}] }, {category: value.category}, {city:value.city} ] } 
Related