eolas/zk/Creating_a_Mongo_schema_and_model.md

82 lines
1.9 KiB
Markdown
Raw Normal View History

2022-08-30 14:00:04 +01:00
---
2024-06-15 11:00:03 +01:00
tags:
- mongo-db
- node-js
- mongoose
- databases
2022-08-30 14:00:04 +01:00
---
# Creating a schema and model
## Schema
In order start adding
2024-06-15 11:15:03 +01:00
[collections and documents](MongoDB_Introduction.md) 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.)
2022-08-30 14:00:04 +01:00
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:
2022-08-30 14:00:04 +01:00
### Creating a schema
```js
const courseSchema = new mongoose.Schema({
name: { type: String, required: true, minlength: 5, maxlength: 255 },
author: String,
tags: [String],
data: { type: Date, default: Date.now }, // if unspecified, entry will default to current date
isPublished: Boolean,
});
```
> This is similar to declaring a type or interface in TypeScript
#### Available data types
The following data types are available:
- `String`
- `Number`
- `Boolean`
- `Array`
- `Date`
- `Buffer`
- `ObjectID` (for UUIDs)
> Note that we set our validation criteria as the second property for each
> schema value. There is more info info on validation in a
2024-02-17 11:57:44 +00:00
> [separate entry](Validating_Mongoose_schemas.md);
2022-08-30 14:00:04 +01:00
## 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:
2022-08-30 14:00:04 +01:00
```js
const Course = mongoose.model("Course", courseSchema);
```
Now we can start adding specific courses as documents to our collection. We do
this by referring to the model, i.e.
2022-08-30 14:00:04 +01:00
```js
const course = new Course({
name: "Node.js Course",
author: "Ozzy Osbourne",
tags: ["node", "backend"],
isPublished: true,
});
```
2024-02-16 16:14:01 +00:00
![](/img/mongoose-hierarchy.svg)
2022-08-30 14:00:04 +01:00
## Outcome
Having created a database, connected to it with Mongoose, and created a model we
will see our collection reflected in Compass:
2022-08-30 14:00:04 +01:00
2024-02-16 16:14:01 +00:00
![](img/../../../img/mongo-collection.png)