MongoDB Cheatsheet
1955
1. About MongoDB
MongoDB is a cross platform document oriented NoSQL database.
2. Installation
On Mac
brew install mongodb
On Ubuntu (18.04)
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
For other platforms you can get details here https://docs.mongodb.com/manual/administration/install-community/
3. Mongo Shell
Mongo Shell is easiest way to experiment with MongoDB in the beginning.
You can login to shell by running command mongo
4. Mongo Commands
- list all databases
show dbs
- create/ login to a database
use <database_name>
* create collection
```sh
db.createCollection('<collection_name>')
5. Mongo Queries
Lets take an use case, using which we can go over all MongoDB commands.
Lets build a 'Car Information' application which stores all cars with its specifications.
Inserting documents
db.collection.insert()
using insert
you can either insert one document or array of documents
db.cars.insert({ "name" : "Volvo xc 60", "type" : "SUV" });
db.cars.insert(
[
{ "name" : "Volvo xc 60", "type" : "SUV" },
{ "name" : "Volvo xc 90", "type" : "SUV" },
{ "name" : "Volvo S90", "type" : "SUV" }
]
);
db.collection.insertOne()
Inserts one document
db.cars.insert({ "name" : "Volvo xc 60", "type" : "SUV" });
db.collection.insertMany
Inserts multiple documents
db.cars.insertMany(
[
{ "name" : "Volvo xc 60", "type" : "SUV" },
]
);
db.collection.save()
Upsert a document. If you provide _id which is already exist then it updates the document.
db.cars.save( { _id: 3, "name" : "Volvo xc 60", "type" : "SUV"} );
Updating documents
db.collection.update()
Updates one or more than one document(s) in collection based on matching document and based on multi
option
Syntax:
db.cars.update(
<query>,
<update>,
<options>
);
Example:
db.cars.update(
{ type: "SUV" },
{ $set: { size : 5} },
{ multi: true}
)
db.collection.updateOne()
Updates a single document based on matching query
db.collection.updateMany()
Updates multiple documents based on query
db.collection.replaceOne()
Replaces entire content of document except _id field
db.collection.findOneAndUpdate(<filter>, <update>, <options>)
Updates a single document. Following are some of the optionsupsert
: When true inserts a document.returnNewDocument
: when true returns new document instead original document. When upsert is true and returnNewDocument is false then null will be returned in case of new document insertion.
Reading Documents
db.collection.findOne()
Returns one document matching the given query
db.collection.findOne({ _id : 123}); # finding a document with _id
db.collection.findOne({ type : "SUV"}); # return one SUV
findOne with projection (limiting the fields to return)
db.collection.findOne({ type : "SUV"}, {name: 1}); # returns _id & name fields only
db.collection.find()
Returns a cursor with selected documents
db.collection.find({ type : "SUV"}); # returns all SUVs
Deleting Documents
db.collection.deleteOne(<filter>, <options>)
Deletes a Single document from collection
db.collection.deleteMany(<filter>, <options>)
Deletes all documents with matching filter
6. Read Concern
We can control the consistency and isolation properties of data reads ( from replica sets & replica set shards) using readConcern
option
Read Concern Levels:
- local: data returns from the instace without guaranteing that its been written to majority of replica members
Default for reads against primary & reads against secondaries
2. available: similar to local, gives lowest latancy for sharded collections.
Default for reads against secondaries
3. majority: only if the data acknowledged by a majority of the replica set members.
4. linearizable: return data after all successful majority-acknowledged writes
5. snapshot: Only available for transactions on multi documents.
7. Write Concern
Using Write Concern
we can set the level of acknowledgment for a given write operation.
This will be sent to mongod and mongos (in case of sharded collections)
Following are the fields that specify write concern
{
w : <number>,
j : <boolean>,
wtimeout: <milli seconds>
}
w lavlues:
0: No acknowledgement requested.
1: This requests for an acknowledgement that is propegaded to standalone mongod or primary in replica set
Note: This is the default write concern value for MongoDB
Greater than 1: Requests acknowledgement from primary & given number -1 of secondaries
j option:
This requests acknowledgement on whether or not the write operation written onto on-disk journal files
wtimeout:
Operations will return error after specified limit, this prevent the client waiting indefinitely.
On failure MongoDB does not rollback the data, data may eventually get stored
8. Indexes
_id Index (Default index):
We can't drop this index
1. Single Field:
2. Multikey Field:
3. Geospatial Index:
4. Text Indexes:
9. Aggregations
1. Aggregation Pipeline
2. Map-Reduce
3. Single Purpose
10. MongoDB Shell Help
help