eolas/Databases/MongoDB/Create_collections_and_documents.md

98 lines
2.6 KiB
Markdown
Raw Normal View History

2022-08-11 09:00:04 +01:00
---
tags:
- Databases
- mongo_db
- node-js
2022-08-11 12:30:04 +01:00
- mongoose
2022-08-11 09:00:04 +01:00
---
# Create collections and documents with Mongoose
2022-08-11 12:00:04 +01:00
## Collections and documents
In order start adding collections and documents to our database, we use Mongoose's schema structure. This is specific to Mongoose and is not a structure that is a part of Mongo in general.
We use a schema to define the shape of documents in a MongoDB collection. To do this we instantiate an instance of the Mongoose `Schema` class and set our properties:
### Creating a schema
```js
const courseSchema = new mongoose.Schema({
name: String,
author: String,
tags: [String],
data: {type: Date, default: Date.now}, // if unspecified, entry will default to current date
isPublished: Boolean
});
```
This is just like defining an inteface or type within TypeScript.
#### Available data types
The following data types are available:
* `String`
* `Number`
* `Boolean`
* `Array`
* `Date`
* `Buffer`
* `ObjectID` (for UUIDs)
### Models
Once we have established our schema we can then create a **model** of it. A model is basically a class representation of the interface we define in the schema:
```js
const Course = mongoose.model("Course", courseSchema);
```
With this in place, we can then create instances of the model. This stands in relation to the model as an object does to a class:
```js
const course = new Course({
name: "Node.js Course",
author: "Ozzy Osbourne",
tags: ["node", "backend"],
isPublished: true
});
```
![](/img/mongoose-hierarchy.svg)
Having created a database, connected to it with Mongoose, and created a model we will see our collection reflected in Compass:
![](img/../../../img/mongo-collection.png)
### Adding a document
We have our database (`playground`) and collection (`courses`) established. We now need to add documents to our collection. We will move our previous code into a function since this will be an asynchronous process:
```js
2022-08-11 12:30:04 +01:00
const pythonCourse = new Course({
2022-08-11 12:00:04 +01:00
name: "Python Course",
author: "Terry Ogleton",
2022-08-11 12:30:04 +01:00
tags: ["python", "backend"],
2022-08-11 12:00:04 +01:00
isPublished: true,
});
async function addCourseDocToDb(courseDocument) {
const result = await courseDocument.save();
console.log(result);
}
addCourseDocToDb(nodeCourse);
```
When we run this, we call the `save` method on the Mongoose schema. We will then have the Mongo document outputted to the console:
```
{
name: 'Python Course',
author: 'Terry Ogleton',
tags: [ 'python' ],
isPublished: true,
_id: new ObjectId("62f4ac989d2fec2f01596b9b"),
date: 2022-08-11T07:15:36.978Z,
__v: 0
}
```
This will also be reflected in Compass:
![](/img/mongo-doc-added.png)