MongoDB - Data Modelling

Data in MongoDB has a flexible schema.documents in the same collection. They do not need to have the same set of fields or structure Common fields in a collection’s documents may hold different types of data.

Data Model Design

MongoDB provides two types of data models: — Embedded data model and Normalized data model. Based on the requirement, you can use either of the models while preparing your document.

Embedded Data Model

In this model, you can have (embed) all the related data in a single document, it is also known as de-normalized data model.

For example, assume we are getting the details of employees in three different documents namely, Personal_details, Contact and, Address, you can embed all the three documents in a single one as shown below −

{
	_id: ,
	Emp_ID: "10025AE336"
	Personal_details:{
		First_Name: "Kishan",
		Last_Name: "choudhary",
		Date_Of_Birth: "1995-09-26"
	},
	Contact: {
		e-mail: "kishan.choudhary123@gmail.com",
		phone: "9848022338"
	},
	Address: {
		city: "delhi",
		Area: "xyz",
		State: "delhi"
	}
}

Normalized Data Model

In this model, you can refer the sub documents in the original document, using references. For example, you can re-write the above document in the normalized model as:

Employee:

{
	_id: <ObjectId101>,
	Emp_ID: "10025AE336"
}

Personal_details:

{
	_id: <ObjectId102>,
	empDocID: " ObjectId101",
	First_Name: "kishan",
	Last_Name: "choudhary",
	Date_Of_Birth: "1995-09-26"
}

Contact:

{
	_id: <ObjectId103>,
	empDocID: " ObjectId101",
	e-mail: "kishanchoudhary123@gmail.com",
	phone: "9911223344"
}

Address:

{
	_id: <ObjectId104>,
	empDocID: " ObjectId101",
	city: "delhi",
	Area: "xyz",
	State: "delhi"
}

Considerations while designing Schema in MongoDB

  • Design your schema according to user requirements.

  • Combine objects into one document if you will use them together. Otherwise separate them (but make sure there should not be need of joins).

  • Duplicate the data (but limited) because disk space is cheap as compare to compute time.

  • Do joins while write, not on read.

  • Optimize your schema for most frequent use cases.

  • Do complex aggregation in the schema.

Example

Suppose a client needs a database design for his blog/website and see the differences between RDBMS and MongoDB schema design. Website has the following requirements.

  • Every post has the unique title, description and url.

  • Every post can have one or more tags.

  • Every post has the name of its publisher and total number of likes.

  • Every post has comments given by users along with their name, message, data-time and likes.

  • On each post, there can be zero or more comments.

In RDBMS schema, design for above requirements will have minimum three tables.

RDBMS Schema Design

While in MongoDB schema, design will have one collection post and the following structure −

{
   _id: POST_ID
   title: TITLE_OF_POST, 
   description: POST_DESCRIPTION,
   by: POST_BY,
   url: URL_OF_POST,
   tags: [TAG1, TAG2, TAG3],
   likes: TOTAL_LIKES, 
   comments: [	
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES 
      },
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES
      }
   ]
}

So while showing the data, in RDBMS you need to join three tables and in MongoDB, data will be shown from one collection only.

The use Command

MongoDB use DATABASE_NAME is used to create database. The command will create a new database if it doesn't exist, otherwise it will return the existing database.

Syntax

Basic syntax of use DATABASE statement is as follows −

use DATABASE_NAME

Example

If you want to use a database with name <mydb>, then use DATABASE statement would be as follows −

>use mydb
switched to db mydb

To check your currently selected database, use the command db

>db
mydb

If you want to check your databases list, use the command show dbs.

>show dbs
local     0.78125GB
test      0.23012GB

Your created database (mydb) is not present in list. To display database, you need to insert at least one document into it.

>db.movie.insert({"name":"tutorials point"})
>show dbs
local      0.78125GB
mydb       0.23012GB
test       0.23012GB

In MongoDB default database is test. If you didn't create any database, then collections will be stored in test database.

The dropDatabase() Method

MongoDB db.dropDatabase() command is used to drop a existing database.

Syntax

Basic syntax of dropDatabase() command is as follows −

db.dropDatabase()

This will delete the selected database. If you have not selected any database, then it will delete default 'test' database.

Example

First, check the list of available databases by using the command, show dbs.

>show dbs
local      0.78125GB
mydb       0.23012GB
test       0.23012GB
>

If you want to delete new database <mydb>, then dropDatabase() command would be as follows −

>use mydb
switched to db mydb
>db.dropDatabase()
>{ "dropped" : "mydb", "ok" : 1 }
>

Now check list of databases.

>show dbs
local      0.78125GB
test       0.23012GB
>

Comments

Popular posts from this blog

SPARK - Deployment

SPARK- DATAFRAME DSL