MongoDB Exercise - Look for restaurants with a grade of 2 or 6 that are located in Manhattan or Brooklyn, and whose cuisine isn't American or Chinese
Write a MongoDB query to find the restaurants that have a grade with a score of 2 or a grade with a score of 6 and are located in the borough of Manhattan or Brooklyn, and their cuisine is not American or Chinese.
Structure of 'restaurants' collection :
{ "address": { "building": "1007", "coord": [ -73.856077, 40.848447 ], "street": "Morris Park Ave", "zipcode": "10462" }, "borough": "Bronx", "cuisine": "Bakery", "grades": [ { "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 }, { "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 }, { "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 }, { "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 }, { "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 } ], "name": "Morris Park Bake Shop", "restaurant_id": "30075445" }
Query:
db.restaurants.find({
$and: [
{
$or: [
{ "grades.score": 2 },
{ "grades.score": 6 }
]
},
{
$or: [
{ borough: "Manhattan" },
{ borough: "Brooklyn" }
]
},
{
$nor: [
{ cuisine: "American" },
{ cuisine: "Chinese" }
]
}
]
})
Output:
{ "_id" : ObjectId("6422c0161238e3bec47ca601"), "address" : { "building" : "351", "coord" : [ -73.98513559999999, 40.7676919 ], "street" : "West 57 Street", "zipcode" : "10019" }, "borough" : "Manhattan", "cuisine" : "Irish", "grades" : [ { "date" : { "$date" : 1409961600000 }, "grade" : "A", "score" : 2 }, { "date" : { "$date" : 1374451200000 }, "grade" : "A", "score" : 11 }, { "date" : { "$date" : 1343692800000 }, "grade" : "A", "score" : 12 }, { "date" : { "$date" : 1325116800000 }, "grade" : "A", "score" : 12 } ], "name" : "Dj Reynolds Pub And Restaurant", "restaurant_id" : "30191841" } { "_id" : ObjectId("6422c0181238e3bec47ca607"), "address" : { "building" : "6409", "coord" : [ -74.00528899999999, 40.628886 ], "street" : "11 Avenue", "zipcode" : "11219" }, "borough" : "Brooklyn", "cuisine" : "American ", "grades" : [ { "date" : { "$date" : 1405641600000 }, "grade" : "A", "score" : 12 }, { "date" : { "$date" : 1375142400000 }, "grade" : "A", "score" : 12 }, { "date" : { "$date" : 1360713600000 }, "grade" : "A", "score" : 11 }, { "date" : { "$date" : 1345075200000 }, "grade" : "A", "score" : 2 }, { "date" : { "$date" : 1313539200000 }, "grade" : "A", "score" : 11 } ], "name" : "Regina Caterers", "restaurant_id" : "40356649" } .....
Explanation:
The said query in MongoDB that finds documents in the restaurants collection that have a grade with a score of 2 OR 6, are located in the borough of Manhattan or Brooklyn, and have a cuisine that is not American or Chinese.
The $and operator is used to combine multiple conditions with an AND logical operator.
The $or operator is used as an OR logical operator to find restaurants that have a grade with a score of 2 OR a grade with a score of 6 and the another $or operator checks for the borough is "Manhattan" or "Brooklyn".
The $nor operator is used as a NOR logical operator to find restaurants whose cuisine is NOT American AND NOT Chinese.
Note: This output is generated using MongoDB server version 3.6
Improve this sample solution and post your code through Disqus.
Previous: Find restaurants that are located in Manhattan or Brooklyn and serve non-American cuisine and have a grade of 2 or 6.
Next: All restaurants with a score of 5 or higher.
What is the difficulty level of this exercise?
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://www.w3resource.com/mongodb-exercises/mongodb-exercise-47.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics