Home > front end >  Mongo if inside $match and $or
Mongo if inside $match and $or

Time:04-22

I've been stuck with this for a quite while. I want to filter specials.name field based on two inputs from my form - select and input field. The problem is, whatever I tried, it always chooses on of it. Is there any way to put if, else block inside $or to make it work?

This is the last thing that I tried, and now it works always on searchInput, which is input field, it does not react on changes in select menu.

{
 $match: { 
  $or: [ 
   { 'specials.name':{$in :[searchSpecials, searchInput]}}, 
  ] 
 }
}

const searchSpecials = req.body.searchSpecials
const searchInput = req.body.search

CodePudding user response:

If the two inputs are strings, this works as expected:

db.collection.aggregate([
  {
    $match: {"specials.name": {$in: ["Malinda", "Joseph"]}}
  }
])

and returns:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "specials": {
      "name": "Malinda"
    }
  },
  {
    "_id": ObjectId("5a934e000102030405000002"),
    "specials": {
      "name": "Joseph"
    }
  }
]

As you can see here, on the playground. No need for the $or, since the $in will return all documents that have specials.name which is included in the list of options.

  • Related