# Introducing MongoDB, a document database - MongoDB is a NoSQL, document-based database— storing data in JSON-like (Binary JSON or "BSON") documents. - Unlike relational databases, MongoDB doesn't require a predefined schema, allowing for more flexibility. - **Collections** in MongoDB are groups of documents, roughly equivalent to tables in relational databases. - A collection is automatically created when we attempt to insert a document into it or create an index for it. - A MongoDB **Database** contains collections, similar to a schema in a relational db. - MongoDB provides a lot more flexibility. Fields can be freely added or left out in documents. The downside of such a structure is that we do not have a consistent schema for documents. However, this can be solved by using libraries, such as Mongoose, >[!info] Other NoSQL implementations There are other NoSQL database implementations: >- Key-value stores (e.g. Valkey/Redis) >- Column-oriented databases (e.g. Amazon Redshift) >- Graph-based databases (e.g. Neo4j) >- Document-based (e.g. MongoDB) Create a new container with a MongoDB server: ```bash docker run -d --name dbserver -p 27017:27017 --restart unless-stopped mongo:6.0.4 ``` # Mongoose Object Data Modeling (ODM) Mongoose is a library that simplifies MongoDB object modeling by reducing the boilerplate code needed to interface with MongoDB. It also includes common business logic such as setting `createdAt` and `updatedAt` timestamps automatically and validation and type casting to keep the db state consistent.