eolas/Databases/MongoDB/Create_collections_and_documents.md
2022-08-12 08:00:04 +01:00

2.6 KiB

tags
Databases
mongo_db
node-js
mongoose

Create collections and documents with Mongoose

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

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:

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:

const course = new Course({
  name: "Node.js Course",
  author: "Ozzy Osbourne",
  tags: ["node", "backend"],
  isPublished: true 
});

Having created a database, connected to it with Mongoose, and created a model we will see our collection reflected in Compass:

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:

const pythonCourse = new Course({
  name: "Python Course",
  author: "Terry Ogleton",
  tags: ["python", "backend"],
  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: