MongoDB Overview
- Document DB
- supports ACID
- uses JSON/BSON
- distributed scalability (sharding)
- high availability (replica set)
- free open source Community Edition
- pluggable storage engine support
- queries use MQL (MongoDB Query Language)
- has free text search capabilities
Terminology
Compared with Relational databases, MongoDB has the following terms:
SQL | MongoDB |
---|---|
Database | Database |
Table | Collection |
Row | Document |
Column | Field |
Index | Index |
BSON
BSON stands for “Binary JSON”, it’s binary-encoded. It sacrifies human-readability for performance. BSON supports more data types than traditional JSON (different numeric types, raw binary, dates, ObjectId, etc.).
Example:
On the “frontend”, we talk with MongoDB in JSON. In the backend, MongoDB stores the documents as BSONs.
All the BSON types can be found in the MongoDB Docs.
Connection
When talking with Mongo DB, it uses TCP/IP with TLS, and the Mongo Wire Protocol. It does not use HTTP. Therefore, when using some tracing or observability in general, you will not see Mongo traffic being recorded by default. You will most likely need some Mongo-specific instrumentation. The Mongo Wire Protocol might be sniffed with tools such as WireShark.
When initiating a connection with Mongo, before any user-initiated query gets sent, the client negotiates with the server on various parameters, which translates to about 4 request-responses (in Mongo Wire Protocol) being sent.
Dates
A date can be represented in MongoDB with ISODate
.
We can use filtering based on date, including comparison operators such as
$gt
and $lt
.
Index
To create an index:
The index will be created on the name
field in ascending order.
We can get all indexes on a collection with:
Mongo supports clustered indexes, so that the primary _id
key in the index is directly associated
with the BSON. The default _id
field in a document is an ObjectId, which takes 12 bytes. It’s
quite a lot for a key, but it’s large for uniqueness among shards. Secondary indexes will point
to the primary index, which means that secondary indexes become quite big, since each entry of the
index needs to contain the 12-byte ObjectId. The situation might be improved (or worsened) with a
custom choice of _id
.
Tools
Shell
Mongo Shell (mongosh) is a CLI interface for accessing MongoDB. It uses JS-like syntax.
Commands
GUI
MongoDB Compass is the official GUI for exploring MongoDB databases. It’s available for Linux, macOS, Windows.
mongoimport
A tool that is added to MongoDB installations that allows for bulk imports of data.
Testing
MongoDB has MongoDB Atlas offering, which is a cloud deploymen of MongoDB. There’s a free tier that is shared, but great for testing. It can be deployed to Azure/GCP/AWS. For testing, we can also load a Sample Dataset.