有關關係型數據庫跟Mongod的語法對比javascript
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.java
The following table presents the various SQL terminology and concepts and the corresponding MongoDB terminology and concepts.mysql
SQL Terms/Concepts | MongoDB Terms/Concepts |
---|---|
database | database |
table | collection |
row | document or BSON document |
column | field |
index | index |
table joins | $lookup , embedded documents |
primary keysql Specify any unique column or column combination as primary key.mongodb |
primary key數據庫 In MongoDB, the primary key is automatically set to the _idfield.oracle |
aggregation (e.g. group by) | aggregation pipelineapp See the SQL to Aggregation Mapping Chart.less |
The following table presents some database executables and the corresponding MongoDB executables. This table is not meant to be exhaustive.ide
MongoDB | MySQL | Oracle | Informix | DB2 | |
---|---|---|---|---|---|
Database Server | mongod |
mysqld |
oracle |
IDS |
DB2 Server |
Database Client | mongo |
mysql |
sqlplus |
DB-Access |
DB2 Client |
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 people
.
The MongoDB examples assume a collection named people
that contain documents of the following prototype:
{
_id: ObjectId("509a8fb2f3f4948bd2f983a0"), user_id: "abc123", age: 55, status: 'A' }
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 people ( id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age Number, status char(1), PRIMARY KEY (id) )
|
Implicitly created on first db.people.insertOne( { user_id: "abc123", age: 55, status: "A" } )
However, you can also explicitly create a collection: db.createCollection("people")
|
ALTER TABLE people 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, db.people.updateMany( { }, { $set: { join_date: new Date() } } )
|
ALTER TABLE people 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, db.people.updateMany( { }, { $unset: { "join_date": "" } } )
|
CREATE INDEX idx_user_id_asc ON people(user_id)
|
db.people.createIndex( { user_id: 1 } )
|
CREATE INDEX idx_user_id_asc_age_desc ON people(user_id, age DESC)
|
db.people.createIndex( { user_id: 1, age: -1 } )
|
DROP TABLE people
|
db.people.drop()
|
For more information, see:
The following table presents the various SQL statements related to inserting records into tables and the corresponding MongoDB statements.
SQL INSERT Statements | MongoDB insertOne() Statements |
---|---|
INSERT INTO people(user_id, age, status) VALUES ("bcd001", 45, "A")
|
db.people.insertOne( { user_id: "bcd001", age: 45, status: "A" } )
|
For more information, see db.collection.insertOne()
.
The following table presents the various SQL statements related to reading records from tables and the corresponding MongoDB statements.
NOTE
The find()
method always includes the _id
field in the returned documents unless specifically excluded through projection. Some of the SQL queries below may include an _id
field to reflect this, even if the field is not included in the corresponding find()
query.
SQL SELECT Statements | MongoDB find() Statements |
---|---|
SELECT * FROM people
|
db.people.find()
|
SELECT id, user_id, status FROM people
|
db.people.find( { }, { user_id: 1, status: 1 } )
|
SELECT user_id, status FROM people
|
db.people.find( { }, { user_id: 1, status: 1, _id: 0 } )
|
SELECT * FROM people WHERE status = "A"
|
db.people.find( { status: "A" } )
|
SELECT user_id, status FROM people WHERE status = "A"
|
db.people.find( { status: "A" }, { user_id: 1, status: 1, _id: 0 } )
|
SELECT * FROM people WHERE status != "A"
|
db.people.find( { status: { $ne: "A" } } )
|
SELECT * FROM people WHERE status = "A" AND age = 50
|
db.people.find( { status: "A", age: 50 } )
|
SELECT * FROM people WHERE status = "A" OR age = 50
|
db.people.find( { $or: [ { status: "A" } , { age: 50 } ] } )
|
SELECT * FROM people WHERE age > 25
|
db.people.find( { age: { $gt: 25 } } )
|
SELECT * FROM people WHERE age < 25
|
db.people.find( { age: { $lt: 25 } } )
|
SELECT * FROM people WHERE age > 25 AND age <= 50
|
db.people.find( { age: { $gt: 25, $lte: 50 } } )
|
SELECT * FROM people WHERE user_id like "%bc%"
|
db.people.find( { user_id: /bc/ } )
-or- db.people.find( { user_id: { $regex: /bc/ } } )
|
SELECT * FROM people WHERE user_id like "bc%"
|
db.people.find( { user_id: /^bc/ } )
-or- db.people.find( { user_id: { $regex: /^bc/ } } )
|
SELECT * FROM people WHERE status = "A" ORDER BY user_id ASC
|
db.people.find( { status: "A" } ).sort( { user_id: 1 } )
|
SELECT * FROM people WHERE status = "A" ORDER BY user_id DESC
|
db.people.find( { status: "A" } ).sort( { user_id: -1 } )
|
SELECT COUNT(*) FROM people
|
db.people.count()
or db.people.find().count()
|
SELECT COUNT(user_id) FROM people
|
db.people.count( { user_id: { $exists: true } } )
or db.people.find( { user_id: { $exists: true } } ).count()
|
SELECT COUNT(*) FROM people WHERE age > 30
|
db.people.count( { age: { $gt: 30 } } )
or db.people.find( { age: { $gt: 30 } } ).count()
|
SELECT DISTINCT(status) FROM people
|
db.people.distinct( "status" )
|
SELECT * FROM people LIMIT 1
|
db.people.findOne()
or db.people.find().limit(1)
|
SELECT * FROM people LIMIT 5 SKIP 10
|
db.people.find().limit(5).skip(10)
|
EXPLAIN SELECT * FROM people WHERE status = "A"
|
db.people.find( { status: "A" } ).explain()
|
For more information, see:
The following table presents the various SQL statements related to updating existing records in tables and the corresponding MongoDB statements.
SQL Update Statements | MongoDB updateMany() Statements |
---|---|
UPDATE people SET status = "C" WHERE age > 25
|
db.people.updateMany( { age: { $gt: 25 } }, { $set: { status: "C" } } )
|
UPDATE people SET age = age + 3 WHERE status = "A"
|
db.people.updateMany( { status: "A" } , { $inc: { age: 3 } } )
|
For more information, see db.collection.updateMany()
, $set
, $inc
, and $gt
.
The following table presents the various SQL statements related to deleting records from tables and the corresponding MongoDB statements.
SQL Delete Statements | MongoDB deleteMany() Statements |
---|---|
DELETE FROM people WHERE status = "D"
|
db.people.deleteMany( { status: "D" } )
|
DELETE FROM people
|
db.people.deleteMany({})
|
For more information, see db.collection.deleteMany()
.