TSlegaitis
TSlegaitis

Reputation: 1310

Mongoose search multiple fields

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!

Upvotes: 5

Views: 10449

Answers (1)

Mahesh Bhatnagar
Mahesh Bhatnagar

Reputation: 1080

Please try this query

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

Upvotes: 11

Related Questions