$and operator ------------- Find movies with high IMDb score and high Tomato meter value. db.movieDetails.find({$and: [ {"imdb.rating": {$gte: 8.8}}, {"tomato.meter": {$gte: 95}} ]}) How many movies did you find? TODO... However, in this case $and is not necessary. We can write it in a simpler way: db.movieDetails.find({"imdb.rating": {$gte: 8.8}, "tomato.meter": {$gte: 95}}) But why do we need an $and operator then? db.movieDetails.find({"title": {$gt: "C"}, "title": {$regex: "a"}}, {_id: 0, title: 1}).pretty() If we write this, the second criterion will overwrite the first one! It will simply mean: find movies whose title contains the character "a". Why? We use the same key ("title") twice in a JSON document. Keys must be unique. Solution #1: use $and db.movieDetails.find({$and: [ {"title": {$gt: "C"}}, {"title": {$regex: "a"}} ]}, {_id: 0, title: 1}) Solution #2: multiple criteria about a field db.movieDetails.find({"title": {$gt: "C", $regex: "a"}}, {_id: 0, title: 1}).pretty() Now the two criteria ($gt and $regex) are about the "title" field.