针对以下图表,你可能会考虑查看 常见问题 章节查询一些关于MongoDB的常用问题。
术语和概念¶
下表中列出了多个SQL中的术语和概念以及相对应的MongoDB中的术语和概念。
可执行文件¶
下表中列出了一些数据库的可执行文件名以及相对应的MongoDB的可执行文件名。表中的数据并不是详尽的。
|
MongoDB |
MySQL |
Oracle |
Informix |
DB2 |
Database Server |
mongod |
mysqld
|
oracle |
IDS |
DB2 Server |
Database Client |
mongo |
mysql |
sqlplus |
DB-Access |
DB2 Client |
下表中列出了多种SQL语句以及相对应的MongoDB的语句。表中的示例有以下假设条件:
创建和修改¶
下表中列出了多种表级别操作的SQL语句以及相对应的MongoDB的语句。
SQL 建模语句
|
MongoDB 建模语句
|
CREATE TABLE users (
id MEDIUMINT NOT NULL
AUTO_INCREMENT,
user_id Varchar(30),
age Number,
status char(1),
PRIMARY KEY (id)
)
|
第一次执行 insert() 操作时隐式创建。如果文档中不指定``_id``列,那么会自动添加``_id``列并默认为主键。
db.users.insert( {
user_id: "abc123",
age: 55,
status: "A"
} )
当然,你也可以显式的创建一个集合:
db.createCollection("users")
|
ALTER TABLE users
ADD join_date DATETIME
|
集合中并不强制规定文档的结构;比如:集合级别并没有文档结构转换的语句。
However, at the document level, update() operations can add fields to existing
documents using the $set operator.
db.users.update(
{ },
{ $set: { join_date: new Date() } },
{ multi: true }
)
|
ALTER TABLE users
DROP COLUMN join_date
|
集合中并不强制规定文档的结构;比如:集合级别并没有文档结构转换的语句。
However, at the document level, update() operations can remove fields from
documents using the $unset operator.
db.users.update(
{ },
{ $unset: { join_date: "" } },
{ multi: true }
)
|
CREATE INDEX idx_user_id_asc
ON users(user_id)
|
db.users.createIndex( { user_id: 1 } )
|
CREATE INDEX
idx_user_id_asc_age_desc
ON users(user_id, age DESC)
|
db.users.createIndex( { user_id: 1, age: -1 } )
|
|
|
For more information, see db.collection.insert(),
db.createCollection(), db.collection.update(),
$set, $unset,
db.collection.createIndex(), indexes,
db.collection.drop(), and 数据建模理论.
下表中列出了多种关于插入操作的SQL语句以及相对应的MongoDB语句。
SQL 插入语句
|
Mongodb insert() 语句
|
INSERT INTO users(user_id,
age,
status)
VALUES ("bcd001",
45,
"A")
|
db.users.insert(
{ user_id: "bcd001", age: 45, status: "A" }
)
|
获取更多信息,查看 db.collection.insert().
下表中列出了多种关于查询操作的SQL语句以及相对应的MongoDB语句。
注解
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 查询语句
|
MongoDB find() 语句
|
|
|
SELECT id,
user_id,
status
FROM users
|
db.users.find(
{ },
{ user_id: 1, status: 1 }
)
|
SELECT user_id, status
FROM users
|
db.users.find(
{ },
{ user_id: 1, status: 1, _id: 0 }
)
|
SELECT *
FROM users
WHERE status = "A"
|
db.users.find(
{ status: "A" }
)
|
SELECT user_id, status
FROM users
WHERE status = "A"
|
db.users.find(
{ status: "A" },
{ user_id: 1, status: 1, _id: 0 }
)
|
SELECT *
FROM users
WHERE status != "A"
|
db.users.find(
{ status: { $ne: "A" } }
)
|
SELECT *
FROM users
WHERE status = "A"
AND age = 50
|
db.users.find(
{ status: "A",
age: 50 }
)
|
SELECT *
FROM users
WHERE status = "A"
OR age = 50
|
db.users.find(
{ $or: [ { status: "A" } ,
{ age: 50 } ] }
)
|
SELECT *
FROM users
WHERE age > 25
|
db.users.find(
{ age: { $gt: 25 } }
)
|
SELECT *
FROM users
WHERE age < 25
|
db.users.find(
{ age: { $lt: 25 } }
)
|
SELECT *
FROM users
WHERE age > 25
AND age <= 50
|
db.users.find(
{ age: { $gt: 25, $lte: 50 } }
)
|
SELECT *
FROM users
WHERE user_id like "%bc%"
|
db.users.find( { user_id: /bc/ } )
|
SELECT *
FROM users
WHERE user_id like "bc%"
|
db.users.find( { user_id: /^bc/ } )
|
SELECT *
FROM users
WHERE status = "A"
ORDER BY user_id ASC
|
db.users.find( { status: "A" } ).sort( { user_id: 1 } )
|
SELECT *
FROM users
WHERE status = "A"
ORDER BY user_id DESC
|
db.users.find( { status: "A" } ).sort( { user_id: -1 } )
|
SELECT COUNT(*)
FROM users
|
or
|
SELECT COUNT(user_id)
FROM users
|
db.users.count( { user_id: { $exists: true } } )
or
db.users.find( { user_id: { $exists: true } } ).count()
|
SELECT COUNT(*)
FROM users
WHERE age > 30
|
db.users.count( { age: { $gt: 30 } } )
or
db.users.find( { age: { $gt: 30 } } ).count()
|
SELECT DISTINCT(status)
FROM users
|
db.users.distinct( "status" )
|
SELECT *
FROM users
LIMIT 1
|
or
|
SELECT *
FROM users
LIMIT 5
SKIP 10
|
db.users.find().limit(5).skip(10)
|
EXPLAIN SELECT *
FROM users
WHERE status = "A"
|
db.users.find( { status: "A" } ).explain()
|
获取更多信息,查看 db.collection.find(), db.collection.distinct(), db.collection.findOne(), $ne $and, $or, $gt, $lt, $exists, $lte, $regex, limit(), skip(), explain(), sort(), and count().
下表中列出了多种关于更新的SQL语句以及相对应的MongoDB语句。
SQL 更新语句
|
MongoDB update() 语句
|
UPDATE users
SET status = "C"
WHERE age > 25
|
db.users.update(
{ age: { $gt: 25 } },
{ $set: { status: "C" } },
{ multi: true }
)
|
UPDATE users
SET age = age + 3
WHERE status = "A"
|
db.users.update(
{ status: "A" } ,
{ $inc: { age: 3 } },
{ multi: true }
)
|
获取更多信息,查看 db.collection.update(), $set, $inc, and $gt.
下表中列出了多种关于删除的SQL语句以及相关的MongoDB语句。
SQL 删除语句
|
MongoDB remove() 语句
|
DELETE FROM users
WHERE status = "D"
|
db.users.remove( { status: "D" } )
|
|
|
|