saintyusuf
saintyusuf

Reputation: 504

How to find records by a word it contains in MongoDB

I want to filter my products. I have 4 products in my Mongodb.

These are:

[
{name: "Dji Inspire 2", droneSeries: "inspire"},
{name: "Dji Phantom 4 Pro", droneSeries: "phantom"},
{name: "Dji Mavic 2 Pro", droneSeries: "mavic"},
{name: "Dji Spark", droneSeries: "spark"}
]

Also I have an input row (checkbox) for selecting drone series for which one to show you. These are Inspire, Phantom, Mavic, Spark.

When I check the inspire checkbox, I see the inspire drone. Everything is good until here. Here is the code which is finding inspire drones:

const droneSeriesArray = await req.body.droneSeriesArray //["inspire"]
const droneSeriesString = await droneSeriesArray.toString() //inspire
let products = await Products.find({droneSeries: droneSeriesString})

But when I check the phantom checkbox, the code is not working:

const droneSeriesArray = await req.body.droneSeriesArray //["inspire", "phantom"]
const droneSeriesString = await droneSeriesArray.toString() //inspire,phantom
let products = await Products.find({droneSeries: droneSeriesString})

I found something like this and tried it:

const droneSeriesArray = await req.body.droneSeriesArray //["inspire", "phantom"]
const droneSeriesString = await droneSeriesArray.toString() //inspire,phantom
let products = await Products.find({droneSeries: {$elemMatch: {droneSeriesString}}})

And this too is not working. So, what do you suppose?

Upvotes: 0

Views: 26

Answers (1)

Rajdeep D
Rajdeep D

Reputation: 3910

You can use $in like below

working Playground here

await Products.find({droneSeries: {$in: droneSeriesArray}})

Upvotes: 1

Related Questions