SQL to MongoDB Mapping Chart
The following table presents the various SQL terminology and concepts and the corresponding MongoDB terminology and concepts.
SQL Terms/Concepts | MongoDB Terms/Concepts |
database | database |
table | collection |
row | document or BSON document |
column | field |
index | index |
table joins | embedded documents and linking |
primary key
Specify any unique column or column combination as primary key. |
primary key
In MongoDB, the primary key is automatically set to the_id field. |
aggregation (e.g. group by) | aggregation pipeline
See the SQL to Aggregation Mapping Chart. |
Executables
The following table presents the MySQL/Oracle executables and the corresponding MongoDB executables.
MySQL/Oracle | MongoDB | |
Database Server | mysqld/oracle | mongod |
Database Client | mysql/sqlplus | mongo |
Examples
The following table presents the various SQL statements and the corresponding MongoDB statements. The examples in the table assume the following conditions:
- The SQL examples assume a table named users.
- The MongoDB examples assume a collection named users that contain documents of the following prototype:
- {
- :”509a8fb2f3f4948bd2f983a0″),
- : “abc123”,
- : 55,
- : ‘A’
- }
Create and Alter
The following table presents the various SQL statements related to table-level actions and the corresponding MongoDB statements.
SQL Schema Statements | MongoDB Schema Statements |
CREATE TABLE users (
id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age Number, status char(1), PRIMARY KEY (id) ) |
Implicitly created on first insert() operation. The primary key _id is automatically added if _id field is not specified.
user_id: “abc123”, age: 55, status: “A” } ) However, you can also explicitly create a collection:
|
ALTER TABLE users
ADD join_date DATETIME |
Collections do not describe or enforce the structure of its documents; i.e. there is no structural alteration at the collection level.
However, at the document level, update() operations can add fields to existing documents using the $set operator.
{ }, { $set: { join_date: new Date() } }, { multi: true } ) |
ALTER TABLE users
DROP COLUMN join_date |
Collections do not describe or enforce the structure of its documents; i.e. there is no structural alteration at the collection level.
However, at the document level, update() operations can remove fields from documents using the $unset operator.
{ }, { $unset: { join_date: “” } }, { multi: true } ) |
CREATE INDEX idx_user_id_asc
ON users(user_id) |
|
CREATE INDEX
idx_user_id_asc_age_desc ON users(user_id, age DESC) |
|
DROP TABLE users |
|
For more information, see db.collection.insert(), db.createCollection(),db.collection.update(), $set, $unset, db.collection.ensureIndex(), indexes,db.collection.drop(), and Data Modeling Concepts.
Insert
The following table presents the various SQL statements related to inserting records into tables and the corresponding MongoDB statements.
SQL INSERT Statements | MongoDB insert() Statements |
INSERT INTO users(user_id,
age, status) VALUES (“bcd001”, 45, “A”) |
{ user_id: “bcd001”, age: 45, status: “A” } ) |
For more information, see db.collection.insert().
Select
The following table presents the various SQL statements related to reading records from tables and the corresponding MongoDB statements.
SQL SELECT Statements | MongoDB find() Statements |
SELECT *
FROM users |
|
SELECT id,
user_id, status FROM users |
{ }, { user_id: 1, status: 1 } ) |
SELECT user_id, status
FROM users |
{ }, { user_id: 1, status: 1, _id: 0 } ) |
SELECT *
FROM users WHERE status = “A” |
{ status: “A” } ) |
SELECT user_id, status
FROM users WHERE status = “A” |
{ status: “A” }, { user_id: 1, status: 1, _id: 0 } ) |
SELECT *
FROM users WHERE status != “A” |
{ status: { $ne: “A” } } ) |
SELECT *
FROM users WHERE status = “A” AND age = 50 |
{ status: “A”, age: 50 } ) |
SELECT *
FROM users WHERE status = “A” OR age = 50 |
{ $or: [ { status: “A” } , { age: 50 } ] } ) |
SELECT *
FROM users WHERE age > 25 |
{ age: { $gt: 25 } } ) |
SELECT *
FROM users WHERE age < 25 |
{ age: { $lt: 25 } } ) |
SELECT *
FROM users WHERE age > 25 AND age <= 50 |
{ age: { $gt: 25, $lte: 50 } } ) |
SELECT *
FROM users WHERE user_id like “%bc%” |
|
SELECT *
FROM users WHERE user_id like “bc%” |
|
SELECT *
FROM users WHERE status = “A” ORDER BY user_id ASC |
|
SELECT *
FROM users WHERE status = “A” ORDER BY user_id DESC |
|
SELECT COUNT(*)
FROM users |
or
|
SELECT COUNT(user_id)
FROM users |
or
|
SELECT COUNT(*)
FROM users WHERE age > 30 |
or
|
SELECT DISTINCT(status)
FROM users |
|
SELECT *
FROM users LIMIT 1 |
or
|
SELECT *
FROM users LIMIT 5 SKIP 10 |
|
EXPLAIN SELECT *
FROM users WHERE status = “A” |
|
For more information, see db.collection.find(), db.collection.distinct(),db.collection.findOne(), $ne $and, $or, $gt, $lt, $exists, $lte, $regex, limit(),skip(), explain(), sort(), and count().
Update Records
The following table presents the various SQL statements related to updating existing records in tables and the corresponding MongoDB statements.
SQL Update Statements | MongoDB update() Statements |
UPDATE users
SET status = “C” WHERE age > 25 |
{ age: { $gt: 25 } }, { $set: { status: “C” } }, { multi: true } ) |
UPDATE users
SET age = age + 3 WHERE status = “A” |
{ status: “A” } , { $inc: { age: 3 } }, { multi: true } ) |
For more information, see db.collection.update(), $set, $inc, and $gt.
Delete Records
The following table presents the various SQL statements related to deleting records from tables and the corresponding MongoDB statements.
SQL Delete Statements | MongoDB remove() Statements |
DELETE FROM users
WHERE status = “D” |
|
DELETE FROM users |
|
For more information, see db.collection.remove().
In addition to the charts that follow, you might want to consider the Frequently Asked Questions section for a selection of common questions about MongoDB.