//Approach: //Create cuisines first, then inspection codes, then inspections //create cuisines db.Cuisine.insert({cuisine:"Bakery"}) db.Cuisine.insert({cuisine:"Fruits/Vegetables"}) //create inspection codes db.ViolationCodes.insert({code:"06N",description:"Improperly cleaned"}) db.ViolationCodes.insert({code:"08B",description:"Mice"}) db.ViolationCodes.insert({code:"12C",description:"Hands not washed"}) //add Restaurants db.Inspections.insert({name:"Morris Park Bake Shop", boro:"Bronx",cuisine:"Bakery"}) db.Inspections.insert({name:"Tim's Tasty Treats", boro:"Manhattan",cuisine:"Fruits/Vegetables"}) //add inspections db.Inspections.update({name:"Morris Park Bake Shop"},{$push: {inspections:{date: new Date("2020-5-5"), score:10}}}) db.Inspections.update({name:"Morris Park Bake Shop"},{$push: {inspections:{date: new Date("2020-4-4"), score:12}}}) db.Inspections.update({name:"Tim's Tasty Treats"},{$push: {inspections:{date: new Date("2020-3-3"), score:5}}}) db.Inspections.update({name:"Tim's Tasty Treats"},{$push: {inspections:{date: new Date("2020-2-2"), score:7}}}) //add violations (note the $ to insert a new array into the existing subdocument) db.Inspections.update({name:"Morris Park Bake Shop","inspections.date": new Date("2020-05-05")},{$set: {"inspections.$.violations":["06N","08B"]}}) db.Inspections.update({name:"Morris Park Bake Shop","inspections.date": new Date("2020-04-04")},{$set: {"inspections.$.violations":["12C"]}}) db.Inspections.update({name:"Tim's Tasty Treats","inspections.date": new Date("2020-3-3")},{$set: {"inspections.$.violations":[]}}) db.Inspections.update({name:"Tim's Tasty Treats","inspections.date": new Date("2020-2-2")},{$set: {"inspections.$.violations":["08B"]}}) //find all bakeries db.Inspections.find({cuisine:"Bakery"}).pretty() //find just the names of all restaurants inspected after 5/5/2020 db.Inspections.find({"inspections.date":{$gt: new Date("2020-5-1")}},{"name":1,_id:0}).pretty() //find all inspections that had a violation code of 08B db.Inspections.find({"inspections.violations":"08B"}).pretty() // Alternative, insert everything at once //create cuisines db.Cuisine.insert([{cuisine:"Bakery"},{cuisine:"Fruits/Vegetables"}]) //create inspection codes db.ViolationCodes.insert([{code:"06N",description:"Improperly cleaned surface"},{code:"08B",description:"Mice"},{code:"12C",description:"No hand washing"}]) //add Restaurants db.Inspections.insert({name:"Morris Park Bake Shop",boro:"Bronx",inspections:[{date: new Date("2020-5-5"),score:10,violations:["06N","08B"]},{date: new Date("2019-4-4"),score:12,violations:["12C"]}]}) //add inspections { "RestaurantName":"Morris Park Bake Shop", "Boro":"Bronx", "Inspections": [ {"InspectionDate": "2017-05-18", "Score" : 7, "Violations": [ {"Code":"06D", "CodeDescription":"Food contact surface..." }, {"Code": "10F", "CodeDescription":"Non-food contact surface improperly..." } ] }, {"InspectionDate": "2018-05-11", "Score" : 5, "Violations": [ {"Code":"10F", "CodeDescription":"Food contact surface..." //denormalize }, {"Code": "08C", "CodeDescription":"Pesticide use..." //denormalize } ] } ] }