英文原文地址:https://docs.mongodb.com/v3.2/reference/sql-comparison/。
本文章属个人翻译,作个人学习之用,如有雷同,纯属巧合。如有错误之处,欢迎指正。
SQL与MongoDB对应表
除以下的表格之外,你可能也想去FAQ部分查看关于MongoDB的更多问题。
术语和概念
以下表格给出了各种SQL术语和概念与相对应的MongoDB术语和概念
SQL 术语/概念 | MongoDB 术语/概念 |
---|---|
数据库(database) | 数据库(database) |
表(table) | 集合(collection) |
行(row) | 文档或BSON文档(document或BSON docuemnt) |
列(column) | 字段(field) |
索引(index) | 索引(index) |
表连接(table joins) | 嵌入文档和链接(embedded documents and linking) |
主键。把唯一的列 或列组合作为主键 | 主键。MongoDB自动把主键设为_id字段 |
聚集/分组(aggregation (e.g. group by)) | 聚集管道 |
可执行文件
以下表格给出了一些数据库可执行文件和对于的MongoDB可执行文件的对应关系。该表格并不是详尽的。
MongoDB | MySQL | Oracle | Informix | DB2 |
---|---|---|---|---|
数据库服务器 | mongod | mysqld | oracle | IDS |
数据库客户端 | mongo | mysql | sqlplus | DB-Access |
示例
下面的例子给出了各种SQL语句与MongoDB语句的对应表。以下例子假设如下条件:
SQL例子假设表的名字是
users
MongoDB例子假设集合的名字是
users
,并且包含如下原型的文档:{ _id: ObjectId("509a8fb2f3f4948bd2f983a0"), user_id: "abc123", age: 55, status: "A" }
Create 和 Alter
以下表格给出了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 | 集合并不描述或强制其文档的结构,在文档级别没有结构的修改 在文档级别, update() 操作可以用$set 操作符给存在的文档添加字段。db.users.update( { }, {$set: {join_date: new Date()}}, {multi: true} ) |
ALTER TABLE users DROP COLUMN join_date | 集合并不描述或强制其文档的结构,在文档级别没有结构的修改 在文档级别, update() 操作可以用$unset 操作符从文档移除字段。db.users.update( { }, {$unset: {join_date: new 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}) |
DROP TABLE users | db.users.drop() |
Insert
SQL | MongoDB |
---|---|
INSERT INTO users(user_id, age, status) VALUES (“bcd001”, 45, “A” ); | db.users.insert( {user_id:”bcd001”, age: 45, status: “A” } ) |
Select
SQL | MongoDB |
---|---|
SELECT * FROM users | db.users.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, satus: 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”}).order({user_id: 1}) |
SELECT * FROM users ORDER BY user_id DESC | db.users.find({status: “A”}).sort({user_id: -1}) |
SELECT COUNT(*) FROM users | db.users.count() 或 db.users.find().count() |
SELECT COUNT(user_id) FROM users | db.users.count({user_id: {$exists: true}}) 或 db.users.find({user_id:{$exists: true}}).count() |
SELECT COUNT(*) FROM users WHERE age > 30 | db.users.count({age: { $gt: 30}}) 或 db.users.find({age: { $gt: 30}}).count() |
SELECT DISTINCT(status) FROM users | db.users.distinct(“status”) |
SELECT * FROM users LIMIT 1 | db.users.findOne() 或 db.users.find().limit(1) |
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() |
Update
SQL | MongoDB |
---|---|
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} ) |
Delete
SQL | MongoDB |
---|---|
DELETE FROM users WHERE status=”D” | db.users.remove({status: “D”}) |
DELETE FROM users | db.users.remove({}) |