Basics of MongoDB
Tags: database, javascript, mongodb, webdev
Published: 2021-11-18 15:29:53

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5567fn7jzumaujixh02o.png)

As you may know, there are many databases that use the "<a href="https://moeslink.com/learning-the-structure-query-language-sql/">Structure Query Language SQL</a>" as their base language. Now we are going to learn about one database that is not based on SQL. That database is MongoDB. As we mentioned  MongoDB is not based on SQL. It's more based on a syntax similar to "JavaScript Object Notation JSON." This tutorial is going to get you through the basics of MongoDB. We are going to learn all the necessary MongoDB to Implement on our applications. By now we assume that you have some <a href="https://moeslink.com/intro-to-javascript-for-web-development/">JavaScript</a> knowledge; especially some JSON. Let us start learning MongoDB; It's going to be fun.

### Definition ###

As we stated before, MongoDB is  a NoSQL database system. MongoDB Main purpose is to ease application development and scaling. There are many ways to run MongoDB; The two most used ones are "MongoDB Atlas," and Locally Installed MongoDB. Now We are going to show. you how to use MongoDB in both of these ways.

### MongoDB Atlas ###

MongoDB Atlas is one way of implementing MongoDB. The  main advantage of MongoDB Atlas is that we can create and use our databases in the cloud. We first need to create an account in <a href="https://www.mongodb.com/atlas/database">MongoDB Atlas</a>. Then we create organizations and clusters. Once we create a cluster in an organization we are ready to use our database.   Most times they provide a unique string that serves to connect the database to our application. This tutorial is only about MongoDB. In some other tutorials we are going to create an application and connect it to MongoDB Atlas. Now we are only going to see how to create clusters in MongoDB Atlas. 

### Creating MongoDB Atlas Account ###

In order to create a MongoDB Atlas Account, We only need to go to their website and create the account. The image below shows you their  home page. You can create an account in their web site just like in any other. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3i49b695a2gyocl0sqil.png)

### Creating a MongoDB Atlas Organization ###

Once we create an account on the MongoDB Atlas website, we can create an organization. That task is quite easy. There are many other images below that shows you how to create an organization in MongoDB Atlas. It also shows you a running cluster; but don't worry about that.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8ft0d3jhx730h1isbyo7.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qhiqlwg4br66zqra4wl7.png)

#### Creating a Cluster ####

The two previous images show you how to create an organization in MongoDB. Once you create an organization, you can create a database cluster in your organization. That cluster is the one that is going to hold your database. The following images show you the steps to create a database cluster.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5m7pfug44focjinu2fgb.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jjp5jfvnibcrpvsxxjky.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yrs33pdnrq5rmrcauq7.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ftaprk8z6fgsh5y9rt4v.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xna5enqb5jfgv5tle403.png)

#### Using Your Database Cluster ####

After you finish with all the steps shown in the images above. You can use your database. MongoDB Atlas provide you a string to use your database in your project. Another set of images below show you how to use your database cluster. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8lzkeczzm40rkwonidzf.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sxk300gpxtxjp71dh1ih.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/672y29m93k6t3476ahmf.png)

The images above show you how to use a MongoDB Atlas database in your application. As you could see there is a string that we can include in our application in order to use the database. If you followed the steps that we showed you in the images, you could also see  some other methods to connect your database. You can choose the  one you need.  

### Locally Installed MongoDB ###

We could see above that we can use MongoDB in the cloud. Although it's quite easy to MongoDB in the cloud, my preferred method is to locally install MongoDB. Maybe you occupy some storage in your computer; but you will have everything locally while working in your projects. We only need to install and initialize MongoDB to start using it locally. We can install mongoDB in Windows, MacOS, and Linux.  As you should know these are the most used operating systems.

#### Installing MongoDB on Windows ####

Installing MongoDB on Windows is an easy task. That is because  you only need to download the MongoDB installer from the  <a href="https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/">MongoDB Download Center</a>. After you download the installer, you install MongoDB following the instructions of the installer.  For Most operating systems we use MongoDB  Community Edition. It's free, and by now it's also all you need.

#### Installing MongoDB on MacOS ####

It's a little bit more tricky to install MongoDB in MacOS. That's because  in MacOS you don't use an installer; you install MongoDB from the terminal. You also need to have in your system the Xcode command line tool and <a href="https://brew.sh/">Homebrew</a>.  Once you have everything installed, you can install MongoDB  by typing the following commands in your terminal.

```shell
brew tap mongodb/brew

```
The Command above is going to get the official MongoDB version from Homebrew. Then you can install MongoDB in your system with the following command.

```shell
brew install mongodb-community@5.0

```

As you can see this command is going to install  MongoDB Community Version 5.0. That is the current version at the time of this tutorial. You can install the version you desire once a new version is available.

#### Initialize MongoDB ####

The commands you saw above show you how to install MongoDB in your system. After the installation you will not be able to use MongoDB unless you initialize it. Some people install MongoDB and spend time trying to use without initializing and not getting any results.  To initialize MongoDB, you only need to type the following command in your terminal.

``` shell
brew services start mongodb-community@5.0
```

That command is going to initialize MongoDB in your system, and you will be able to start working  with MongoDB databases in your system.

### MongoDB First Steps ###

The steps we mentioned above were all to set the MongoDB environment. After you set one of the two work environments, you can start working with MongoDB. The MongoDB shell mongosh is the one responsible for MongoDB database management. In order to start using MongoDB, we only need to type the mongosh command in our terminal. Once we type the mongosh command in our terminal we can see  MongoDB environment and start working.

```shell
~ % mongosh
Current Mongosh Log ID:	6192ada3da035d7a9f0013b8
Connecting to:		mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000
Using MongoDB:		5.0.2
Using Mongosh:		1.0.6

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting:
   2021-11-15T07:46:36.293-05:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
------

Warning: Found ~/.mongorc.js, but not ~/.mongoshrc.js. ~/.mongorc.js will not be loaded.
  You may want to copy or rename ~/.mongorc.js to ~/.mongoshrc.js.

>

```

###Available Databases###

In the section above you could start the MongoDB environment by only typing the mongosh command. By now you should ignore some warnings. Later you can update your system if required. Then you can start working on your MongoDB environment. The first thing we are going to do is seeing the already existing databases in the system. In order to see all databases in the system, we only need to type the show dbs command as you can see below.

```shell 
> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
>

```
 Some of the databases we can see after we type the command, are created by default in MongoDB. We are going to create our own databases and work with them. To create a database in MongoDB, we only need to type the use command followed by the database name we desire. In this case we are going to create a database called customers.  

Take note that when we type the use command it's going to create a database with the name we typed if a database with that name does not exist. If there is a database with that name, the system will assume you want to use the existing database. To create the customers database we only need to type use customers. Then the system will create a database called customers as you can see in the following example.

```shell
> use customers
switched to db customers
>


```

### Creating Database Collections ###

 Once we create a MongoDB Database, you can start inserting data in your database. Data in MongoDB is stored in collections; not in tables as the SQL based  databases. There are many ways of creating a collection. All these ways include the db.createCollection() function. Now we are going to show you the two most used ways of creating a collection.



```shell

customers> db.createCollection("domesticCustomers", {customerName: String, customerGender: String,
 customerCity: String, customerAge: Numbe}); 

{ ok: 1 }

customers> db.createCollection("foreignCustomers");
{ ok: 1 }
customers>


```

The example above shows you two ways of creating collections.  In the first one you specified the fields and types of data to be used. The second one only creates a collection without any specified fields.  Although you could see a confirmation that collection was created { ok: 1 }, you can also confirm the creation of your collections using the command show collections as you can see in the example below.

```shell
customers> show collections
domesticCustomers
foreignCustomers
```

###JSON and BSON ###

Starting this tutorial we specified that data in MongoDB is stored in collections. We also specified that in MongoDB we use syntax similar to JSON. That syntax is called "Binary JSON" or BSON. BSON is similar to JSON; but it's more like an encoded serialization of JSON. We can find useful information in the <a href="https://bsonspec.org/">BSON website</a>. 

###Inserting Data into Collections ###

Now that we know that MongoDB data is stored in BSON, it's time to insert some data into our collections. The two most used functions to insert data into MongoDB are insertOne() and insertMany(). Previous versions of MongoDB used the insert() function. That  function still work; but it's going to be deprecated soon. We can use the mentioned functions with the syntax db.collection.insertOne, or db.collection.insertMany(). Where db refers to database, and collection is the collection name. now let us insert some data into our collections.

```shell
customers> db.domesticCustomers.insertOne({ customerName: "John Smith", CustomerGender:"Male", CustomerCity: "Washington", customerAge: 35} );

{
  acknowledged: true,
  insertedId: ObjectId("6195101d4543a38e25ba68c3")
}


customers> db.domesticCustomers.insertMany([{customerName: "Jackeline Johnson", CustomerGender:"Female", CustomerCity: "Los Angeles", customerAge: 42},{customerName: "James Peterson", CustomerGender:"Male", CustomerCity: "New York", customerAge: 27}, {customerName: "Peter Parker", CustomerGender:"Male", CustomerCity: "Chicago", customerAge: 22}, {customerName: "Sarah Reynolds", CustomerGender:"Female", CustomerCity: "Detroit", customerAge: 30}]);

{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("619512824543a38e25ba68c4"),
    '1': ObjectId("619512824543a38e25ba68c5"),
    '2': ObjectId("619512824543a38e25ba68c6"),
    '3': ObjectId("619512824543a38e25ba68c7")
  }
}


```
### Data ID ###

 You could see in the example above that we inserted data using the two most used functions. We inserted only one record or object with the insertOne() function. After that we inserted an array of objects or records using the insertMany() function. Once you insert the objects into your collections,  you can see that system returned their ID. In MongoDB all objects contain an unique ID auto assigned by the system. You don't have to worry about assigning a PRIMARY KEY as in SQL; In MongoDB you have it automatically.

###Visualizing Data ###

After we insert data into any MongoDB collection, we can visualize it using the find() function. In case you have a lot of objects and want to find only one containing certain data, you can use the findOne() function. Also if you want to find many objects containing similar data you can use the findMany() function. As we have only two collections with only a few records, the example below is going to show you how to use the find() function. You can use these function with a syntax similar to the insert functions. db.collection.find(), db.collectionfindOne(), db.collection.findMany(). As you may already know collection is the collection name.

```shell 
customers> db.domesticCustomers.find();
[
  {
    _id: ObjectId("6195101d4543a38e25ba68c3"),
    customerName: 'John Smith',
    CustomerGender: 'Male',
    CustomerCity: 'Washington',
    customerAge: 35
  },
  {
    _id: ObjectId("619512824543a38e25ba68c4"),
    customerName: 'Jackeline Johnson',
    CustomerGender: 'Female',
    CustomerCity: 'Los Angeles',
    customerAge: 42
  },
  {
    _id: ObjectId("619512824543a38e25ba68c5"),
    customerName: 'James Peterson',
    CustomerGender: 'Male',
    CustomerCity: 'New York',
    customerAge: 27
  },
  {
    _id: ObjectId("619512824543a38e25ba68c6"),
    customerName: 'Peter Parker',
    CustomerGender: 'Male',
    CustomerCity: 'Chicago',
    customerAge: 22
  },
  {
    _id: ObjectId("619512824543a38e25ba68c7"),
    customerName: 'Sarah Reynolds',
    CustomerGender: 'Female',
    CustomerCity: 'Detroit',
    customerAge: 30
  }
]
```

###Find Functions with Parameters ###

We can also use some parameters to find a record. Most times we use the ID to find any specific record. That is because the ID is unique. The findOne() function is going to find the first object containing the specified information, while the findMany() function is going to find all the records with similar information in the specified fields. The example below is going to use the find function with the _id parameter. You will find a only one record with the specified ID. In case we use findOne() or findMany() even the find() function, we can use different parameters not only the _id.

```shell

customers> db.domesticCustomers.find({  _id: ObjectId("619512824543a38e25ba68c4")});
[
  {
    _id: ObjectId("619512824543a38e25ba68c4"),
    customerName: 'Jackeline Johnson',
    CustomerGender: 'Female',
    CustomerCity: 'Los Angeles',
    customerAge: 42
  }
]

```

###Creating Objects differently ###

When we created the two collections in our database, you could see that we specified the fields in only one. The other collection we only specified the name. That is because we can insert as many fields as we want in any collection. Remember that MongoDB works with documents; not with tables as SQL. in the example below we are going to insert one object with one more field in the domesticCustomers collection. We are also going to insert some objects in the foreignCustomers collection.

```shell
customers> db.domesticCustomers.insertOne({customerName: "Jose Martinez", customerGender: "Male", customerCity: "Madison", customerAge: 33, customerEtnicy: "Hispanic" });
{
  acknowledged: true,
  insertedId: ObjectId("61953e0a4543a38e25ba68c8")
}

```

As you can see we successfully could enter another object containing an extra field. If we use the find() function for the collection, we are going to see another field similar to the one below.

```shell
{
    _id: ObjectId("61953e0a4543a38e25ba68c8"),
    customerName: 'Jose Martinez',
    customerGender: 'Male',
    customerCity: 'Madison',
    customerAge: 33,
    customerEtnicy: 'Hispanic'
  }

```

As you can see, we can insert as many  fields as we want for any object in our collections. Now we are going to insert many records in the foreignCustomers collection.

```shell
customers> db.foreignCustomers.insertMany([{customerName: "Pedro Lopez",  customerCountry: "Mexico", customerPayment: 10000},{customerName: "Francois  Pierre",  customerCountry: "France", customerPayment: 50000},{customerName: "Mustafa Ali",  customerCountry: "Pakistan", customerPayment: 30000, customerPlaces: 7}]);
{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("619541e24543a38e25ba68c9"),
    '1': ObjectId("619541e24543a38e25ba68ca"),
    '2': ObjectId("619541e24543a38e25ba68cb")
  }
}

```

Now we can see the results using the find() function. 

```shell
customers> db.foreignCustomers.find();
[
  {
    _id: ObjectId("619541e24543a38e25ba68c9"),
    customerName: 'Pedro Lopez',
    customerCountry: 'Mexico',
    customerPayment: 10000
  },
  {
    _id: ObjectId("619541e24543a38e25ba68ca"),
    customerName: 'Francois  Pierre',
    customerCountry: 'France',
    customerPayment: 50000
  },
  {
    _id: ObjectId("619541e24543a38e25ba68cb"),
    customerName: 'Mustafa Ali',
    customerCountry: 'Pakistan',
    customerPayment: 30000,
    customerPlaces: 7
  }
]

```

###Another way of creating collections ###

 The examples above show you how to insert data into collections already created. In case we want to insert data into another collection we can create a collection even without using the db.createCollection()  function. We just need to specify the name of the collection we want to create while inserting the data. The example below is going to create a new collection called customerProducts and insert data at the same time.

```shell
customers> db.customerProducts.insertMany([{production:"rice", meat: "beef", quantityInPounds: 500},{production:" beans", meat: "chicken", quantityInPouns: 800}]);
{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("619544d84543a38e25ba68cc"),
    '1': ObjectId("619544d84543a38e25ba68cd")
  }
}

```

Now we can  use the commands show collections and see there is a new collection; also we can use the find() function with the new collection as you can see below.

```shell
customers> show collections
customerProducts
domesticCustomers
foreignCustomers


customers> db.customerProducts.find();
[
  {
    _id: ObjectId("619544d84543a38e25ba68cc"),
    production: 'rice',
    meat: 'beef',
    quantityInPounds: 500
  },
  {
    _id: ObjectId("619544d84543a38e25ba68cd"),
    production: ' beans',
    meat: 'chicken',
    quantityInPouns: 800
  }
]

```

###Updating Data in MongoDB ###

We can also update data in MongoDB using some functions. The functions we use to update data are the updateOne(), the updateMany() and we can also use the replaceOne() function. We use a syntax similar to the insert and find() functions. db.collection.updateOne(), db.collection.updateMany(), and db.collection.replaceOne(). Here we only show you the updateOne() function using the _id as parameter to update. The other functions work similar. 

``` shell
customers> db.domesticCustomers.updateOne({_id: ObjectId("619512824543a38e25ba68c5")},
 {$set: {customerName: "James Thomason", CustomerCity: "Boston"}});
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}

```

As you can see we could update one object in our collection using the updateOne() function. We first declared the id, and then we set the new values. If you type the find() function, you can see the new results.

###Deleting Data in MongoDB ###

As in any other database we can delete data in MongoDB. We can delete any data by using the delete functions. These functions are  deleteOne() and deleteMany(). The syntax is similar to the other functions we already used. Now we are going to show you how to delete any object using the deleteOne function.  As you may think, we are going to delete the object by ID 

```shell
customers> db.domesticCustomers.deleteOne({_id: ObjectId("6195101d4543a38e25ba68c3")});
{ acknowledged: true, deletedCount: 1 }
customers>

```

Now we deleted only one object. If you use the find() function, you won't see the John Smith field.  As the _Id is an unique value, deleting and updating by ID is a good practice.

### Deleting All Objects in a Collection ###

Before deleting all  objects in a collection we need to know if the database have some important information. Now we can delete all objects in any collection because this practice data. Working in the field you would need to know if it's ok to delete all data in a collection. We can delete all data in a collection with only one function. That function is the remove()  function. We only type empty braces {} as parameter in the remove() function in order remove everything from the collection. The example below shows you how to remove everything from the customerProducts collection.

```shell
customers> db.customerProducts.remove({});
{ acknowledged: true, deletedCount: 2 }

```

If you try to use the find() function in the collection, you will find nothing. The collection will be empty. This function still works; but you can get a deprecation warning and some other suggestions.

### Deleting a Collection ###

The previous example shows you how to delete all data in a collection. We can also delete the whole collection and  all the data in the collection is going to be deleted with it. In order to delete any collection we only need to use the  drop() function. We can use this function as many other functions described above. db.collection.drop(). Now we are going to delete the foreignCustomer collection.

```shell
customers> db.foreignCustomers.drop();
true
```

As you can see once we drop the collection, it will return true. In case it returns false you did not delete any collection. Now if we use the show collections command, we can see the other collections. The one we deleted is not there.

### Deleting  a Database ###

Before deleting a database we need to know what information it has Now we can delete a practice database;  in a professional environment you need to know before deleting. We can use the dropDatabase() function to delete any database. Now we can delete the same database we have been working with. The customers database. We use the dropDatabase() function in the following way.

```shell
customers> db.dropDatabase();

{ ok: 1, dropped: 'customers' }

```

### Final Notes ###

By now you have seen the basics of MongoDB.  This  information is very useful for MongoDB database development. You saw that MongoDB works with documents not with tables; so  it's very different than SQL. Also we need to be advised that MongoDB is case sensitive. In case you have any misspelled field, or any upper/lower case difference; MongoDB will automatically create a new one with the information we entered. In order to avoid that, we can use a MongoDB ODM. <a href="https://mongoosejs.com">Mongoose</a> and <a href="https://mongodb.github.io/node-mongodb-native/api-generated/mongoclient.html">MongoClient</a> are  very  popular MongoDB ODMs.

Although MongoDB can be used in many environments, it's widely used in <a href="https://moeslink.com/introduction-to-nodejs-and-express/">Nodejs</a>. This information is only the basics of MongoDB. There is a free <a href="https://university.mongodb.com/">MongoDB University </a>website where we can learn with all of their free courses. Thanks for visiting our blog. We hope you learned a lot in this tutorial.

More at <a href="https://moeslink.com/"> Moe's Link </a>