Understanding Databases, Collections, and Documents in MongoDB
Understanding Databases, Collections, and Documents in MongoDB
MongoDB organizes data in a structure that is different from traditional relational databases. To use MongoDB effectively, it's essential to understand its three core building blocks: databases, collections, and documents.
What is a Database in MongoDB?
A database in MongoDB is a container that holds collections, which in turn contain documents. Each database has its own set of files on the disk and is isolated from other databases.
What is a Collection?
A collection is a group of MongoDB documents, similar to a table in relational databases. However, collections are schema-less, meaning documents inside them can have different fields.
What is a Document?
A document is a single record in MongoDB, stored in BSON (Binary JSON) format. It is similar to a row in an SQL table, but far more flexible — allowing nested objects and arrays.
Example: Creating a Database and Collection
Let’s create a new database and collection using the MongoDB Shell.
mongo
use school
db.createCollection("students")
{ "ok" : 1 }
Explanation: Here, we switch to a new database called school. If it doesn't exist, MongoDB will create it once we insert data. Then we create a collection called students.
Inserting a Document into the Collection
Now let’s insert a student document into the students collection.
db.students.insertOne({
name: "Rahul Sharma",
age: 20,
courses: ["Math", "Physics"],
address: {
city: "Delhi",
pincode: 110001
}
})
{
acknowledged: true,
insertedId: ObjectId("...")
}
Explanation: This document represents one student. It includes a name, age, an array of courses, and a nested object for address. This flexible schema allows us to store rich, structured data in one place without complex joins.
Question:
Q: Can the next student we insert have a completely different structure?
A: Yes! MongoDB collections do not require all documents to follow the same schema.
Example: Inserting a Different-Shaped Document
db.students.insertOne({
name: "Aditi Mehta",
year: "Final",
hobbies: ["painting", "reading"]
})
{
acknowledged: true,
insertedId: ObjectId("...")
}
Explanation: This document doesn't have age, courses, or address fields. That’s perfectly fine in MongoDB.
Viewing All Documents
You can view the inserted documents using find():
db.students.find().pretty()
{
"_id": ObjectId("..."),
"name": "Rahul Sharma",
"age": 20,
"courses": ["Math", "Physics"],
"address": {
"city": "Delhi",
"pincode": 110001
}
}
{
"_id": ObjectId("..."),
"name": "Aditi Mehta",
"year": "Final",
"hobbies": ["painting", "reading"]
}
Question:
Q: Do we need to define the fields before inserting documents?
A: No. MongoDB allows dynamic documents, so you can insert any structure at any time. This is great for evolving data models.
Summary
- Database – Top-level container for collections
- Collection – A set of documents (like a table)
- Document – Individual data entry (like a row), stored in BSON
MongoDB's structure is highly flexible and intuitive once you grasp these three concepts. In the next topic, we’ll explore MongoDB’s supported data types in more detail.