There are more than 379 database servers in use around the world today. Among them, MongoDB stands out as a top performer, surpassing databases like HBase, Neo4j, Riak, Memcached, RavenDB, CouchDB, and Redis. Tech giants like Google, Yahoo, and Facebook rely on MongoDB in their production environments.In the DB-Engines ranking, MongoDB holds the 5th position overall, following:
Oracle
MySQL
Microsoft SQL Server
PostgreSQL
MongoDB
Notably, MongoDB is also ranked as the number one NoSQL database.
RDBMS | Mongo |
Database | database |
table | Collection |
Record | Document |
Joins | Embedded Object/Document |
Mongo works perfectly with most all programming languages.
Also, mongo works with Windows and Linux with the same performance and without issues.
Mongo provides Replication, Sharding, Aggregation, and indexing features.
Mongo is an object-oriented and schema-less database.
Mongo is based on JavaScript, and all documents (Records) are presented in JSON format. Also, in Mongo, everything is an object. In Mongo 1st field, the compulsory field is _id which is not skippable.
{
_id: numeric or numeric-alphabetical string or,it set automatically. Mongo id is a 12-byte Object id that is a 4-byte time-stamp with 5 bytes of any random value and 3 bytes of a counter value.
}
mongo document stores like
the document content single field, array, sub-document (join), or, an array of sub-document.
{
_id: 1
First name: Anil,
middle name : Jasvantray,
last name: Jalela
Mobile: [9619904949,2573335,2567580]
}
install mongo:-
1 | add Repo | echo “deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse” > /etc/apt/sources.list.d/mongodb-org-6.0.list |
2 | add Key | wget -qO – https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add – |
3 | update package list | apt-get update |
4 | install mongo server | apt-get install -y mongodb-org && apt-get install mongodb-org-server |
5 | change dir for modification | cd /etc/ |
6 | rename conf | mv mongod.conf mongod.conf_org |
7 | vi mongod.conf and add the below content into this. | |
8 | # mongod.conf
# for documentation of all options, see: # Where and how to store data. # where to write logging data. # network interfaces # how the process runs security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp: |
|
9 | kerate key file on master for replica set | openssl rand -base64 756 > /etc/keyfile-mongo |
10 | change permission | chmod 600 /etc/keyfile-mongo && ll /etc/keyfile-mongo |
11 | change onership of files | chown mongodb:mongodb /etc/mongod.conf /etc/keyfile-mongo |
12 | start mongo | sudo systemctl start mongod |
13 | start mongo on system boot | sudo systemctl enable mongod |
14 | check mongo status | sudo systemctl status mongod |
15 | mongo login command | mongosh |
16 | use mongo database | use admin |
17 | set mongo password | db.createUser( { user: “mongoadmin”, pwd: passwordPrompt(), roles: [ { role: “root”, db: “admin” }, “readWriteAnyDatabase” ] } ) |
18 | mongosh –username=mongoadmin –password=yourpass –authenticationDatabase admin | |
19 | create database | use nitwings |
20 | drop database | “use nitwings” and then “db.dropDatabase()” |
21 | create database-specific user | db.createUser({ user: “blackpost”, pwd: passwordPrompt(), roles: [ { role: “readWrite”, db: “nitwings” } ], mechanisms: [“SCRAM-SHA-256”], authenticationRestrictions: [ { clientSource: [“0.0.0.0/0”] } ] }) |
22 | drop user | “use admin” and then db.dropUser(“blackpost”); |
23 | show users |
db.getUsers() |
24 | create collection | use nitwings db.createCollection(“testCollection”) |
25 |
Insert One Document into collection |
db.testCollection.insertOne({ name: “test”, value: 123 }) |
26 | Insert many Document into collection |
db.testCollection.insertMany([{ name: “blackpost”, value: 789 }, { name: “nitwings”, value: 456 }]) |
27 |
create Index |
db.testCollection.createIndex({ name: 1 }); |
28 | check index created or not for collection |
db.testCollection.getIndexes() |
29 | find document |
nitwings> db.testCollection.findOne({ name: “blackpost” }) { _id: ObjectId(’66d485a63c3f4eb31f5e739c’), name: ‘blackpost’, value: 789 } |
30 | update document |
nitwings> db.testCollection.updateOne({ name: “blackpost” }, { $set: { name: “aniljalela” } }) { acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 1, upsertedCount: 0 } nitwings> db.testCollection.findOne({ name: “aniljalela” }) { _id: ObjectId(’66d485a63c3f4eb31f5e739c’), name: ‘aniljalela’, value: 789 } nitwings> |
31 | delete document |
nitwings> db.testCollection.deleteOne({ name: “aniljalela” }) { acknowledged: true, deletedCount: 1 } nitwings> |
show collections and drop collection |
nitwings> show collections
nitwings> db..drop() |
|
32 | backup database | mongodump –db nitwings –out /opt/backup/ –username mongoadmin –password yourpass –authenticationDatabase admin |
33 | backup database from remote | mongodump –host 10.10.10.10 –port 27017 –db nitwings –out /opt/backup/ –username mongoadmin –password yourpass –authenticationDatabase admin |
34 | mongo all database | mongodump –out /backups/all_databases_backup –username mongoadmin –password yourpass –authenticationDatabase admin
|
35 | mongo all database from remote | mongodump –host 10.10.10.10 –port 27017 –out /path/to/backup /opt/backup/ –username mongoadmin –password yourpass –authenticationDatabase admin |
36 | restore database dump |
mongorestore –host 10.10.10.10 –port 27017 –db nitwings –username mongoadmin –password yourpass –authenticationDatabase admin /opt/backup/nitwings |
37 | drop existing DB and restore db |
mongorestore –host 10.10.10.10 –port 27017 –db nitwings –username mongoadmin –password yourpass –authenticationDatabase admin –drop /opt/backup/nitwings |
38 | restore all databases |
mongorestore –host 10.10.10.10 –port 27017 –username mongoadmin –password yourpass –authenticationDatabase admin /opt/backup/ |
39 |
drop and restore all databases |
mongorestore –host 10.10.10.10 –port 27017 –username mongoadmin –password yourpass –authenticationDatabase admin –drop /opt/backup/ |
40 | restore specific collection |
mongorestore –host 10.10.10.10 –port 27017 –db nitwings –collection –username mongoadmin –password yourpass –authenticationDatabase admin /opt/backup/nitwings/.bson |
If the –drop option is not used with mongorestore, MongoDB restores data without dropping existing collections. If a collection already exists, mongorestore merges the backup with the current data. Documents with the same _id are not overwritten; instead, they are skipped to avoid duplicates. New collections from the dump are created if they don’t exist. This approach can lead to inconsistent or duplicated data, especially if the data structure has changed since the backup was created, potentially causing incorrect query results. Indexes are restored as in the dump, but existing indexes are not recreated, and mismatched index specifications may cause the restore to fail.
Replica set:-
1.1.1.1 production-mongodb-01 master-node1
2.2.2.2 production-mongodb-02 slave-node1
3.3.3.3 production-mongodb-03 slave-node2
(1) Install Mongo on all servers using the above steps from 1 to 17
(2) un-comment below lines from conf
replication: replSetName: “election01” |
(3) keyFile: This is used for internal authentication between MongoDB instances in a replica set or sharded cluster.
It ensures that only authorized MongoDB instances can communicate with each other.
scp /etc/keyfile-mongo 2.2.2.2: /etc/keyfile-mongo scp /etc/keyfile-mongo 3.3.3.3: /etc/keyfile-mongo |
(4) restart master and slave and log in to Mongo to start replication
1 | login master | mongosh –username=mongoadmin –password=yourpass –authenticationDatabase admin |
2 | Initiate replication | rs.initiate() |
3 | add replica | rs.add(“2.2.2.2”) rs.add(“3.3.3.3”) |
4 | check replication status | rs.status() |
5 | remove the replica from the replication | rs.remove(“hostname:port”) |
6 | rs.reconfig({}) | |
7 | db.serverStatus() | |
8 | db.currentOp() | |
9 | db.repairDatabase() | |
10 | db.stats() db.collection.stats() |