We've learned how to use Mongoose to create Schemas and then interact with our MongoDB database. In the following exercise, we will practice how to implement this by creating awesome recipes.
- Fork this repo
- Clone this repo
-
Upon completion, run the following commands:
git add . git commit -m "Completed lab" git push origin master
-
Create Pull Request so your TAs can check up your work.
To run our application, the first thing you have to do is to install all of its dependencies. Run the following command:
$ npm install
Create a Recipe
model inside of the file /models/Recipe.model.js
. The schema should have the following fields:
- title - Type
String
. It should be required and unique. - level - Type
String
. Can be one of the following values: Easy Peasy - Amateur Chef - UltraPro Chef (remember theenum
validator 😉). - ingredients - Type
Array
ofString
s (represented as[ String ]
). - cuisine - Type
String
. Should be required. - dishType - Type
String
. Possible values: breakfast, main_course, soup, snack, drink, dessert or other. - image - Type
String
. Default value: "https://images.media-allrecipes.com/images/75131.jpg". - duration - Type
Number
. The minimum value should be 0. - creator - Type
String
. - created - Type
Date
. By default, today.
In index.js
, after the connection to the database has been established, you should add a new recipe document to the database by calling the Model.create
static, passing it the recipe details as an object. After inserting the recipe, you should console.log
the title
of the recipe.
You can use MongoDB Compass to double check that everything is working as intended.
To run your code, remember you should use:
$ node index.js
Tip: When you have successfully created a new recipe (you see it in the database using Compass tool), you might want to comment out this step. The reason for this is that next time when you run $ node index.js
, it will try to create a new recipe with the same name and you will get an error in the terminal related to the duplicate keys - the title should be unique, and the dish with that title already exists in the database.
We are importing an array of recipes form the data.json
file. Using the Model.insertMany
static, you should add the entire array to the database. After inserting the documents, print the title of each recipe to the console.
Tip: Follow the same tip as in the previous step.
Now you should have six different recipes in the database, but there was a mistake in one of them. The Rigatoni alla Genovese does not take that long. You should update the duration
field and set it to 100. You might want to use the Model.findOneAndUpdate
static. After updating it, print a success message!
Oh oh! The Carrot Cake
is no longer available, so we need to remove it from the database. Using the Model.deleteOne
static, remove that recipe from the database and display a success message after doing it!
After completing every task, you need to close the database. Otherwise, the connection will stay open until the node.js process dies. Pay attention to the asynchronicity of the operation. You should only close the connection after everything is done! 😉
Happy coding! 💙