SQL转 MongoDB语法速查表
翻译整理:qqxufo
我的博客:http://hhxblog.leanote.com/
吐槽:学习MongoDB的时候,在官网看到了SQL 到 MongoDB 的语法转换图。觉得内容不错,所以打算将其整理出来以便日后的学习和使用。
PS:右上角自带目录,可以进行速查。
术语和概念
SQL | MongoDB |
database | database |
table | collection |
row | document 或 BSON document |
column | field |
index | index |
table连接 | document嵌套和连接 |
primary key | primary key |
指定单独一列或者列组合作为primary key | 在MongoDB中primary key会自动设置到——id field中 |
aggregation(例如 group by) | aggregation pipeline |
语法关系
假设存在名为user的collection,它的文档包含如下属性
{
_id:ObjectId("509a8fb2f3f4948bd2f983a0"),
user_id:"abc123",
age:55,
status:'A'
}新建表/集合
SQL
CREATE TABLE users (
id MEDIUMINT NOT NULL
AUTO_INCREMENT,
user_id Varchar(30),
age Number,
status char(1),
PRIMARY KEY (id)
)MongoDB
// 在第一次进行insert()操作的时候会进行隐式创建。
// 如果不指定_id字段的话,_id将会被自动创建
db.users.insert({
user_id:"abc123",
age:55,
status:"A"
})
// 当然也可以单独创建一个collection
db.createCollection("users")
添加新列/字段
SQL
ALTER TABLE users
ADD join_date DATETIMEMongoDB
// collection并不会对它的document结构进行约束
// 在collection层面上并不会有结构的变化
// 但是在document层面上,update()操作可以利用$set为现有的document添加field
db.users.update(
{},
{ $set:{ join_date:newDate()}},
{ multi:true}
)
删除列/字段
SQL
ALTER TABLE users
DROP COLUMN join_dateMongoDB
// collection并不会对它的document结构进行约束
// 在collection层面上并不会有结构的变化
// 但是在document层面上,update()操作可以利用$unset为现有的document移除field
db.users.update(
{},
{ $unset:{ join_date:""}},
{ multi:true}
)
创建索引
SQL
CREATE INDEX idx_user_id_asc
ON users(user_id)MongoDB
db.users.createIndex({ user_id:1})创建联合索引
SQL
CREATE INDEX
idx_user_id_asc_age_desc
ON users(user_id, age DESC)MongoDB
db.users.createIndex({ user_id:1, age:-1})删除表/集合
SQL
DROP TABLE usersMongoDB
db.users.drop()插入
SQL
INSERT INTO users(user_id,
age,
status)
VALUES ("bcd001",
45,
"A")MongoDB
db.users.insert(
{ user_id:"bcd001", age:45, status:"A"}
)查询所有的数据
SQL
SELECT *FROM usersMongoDB
db.users.find()查询所有指定字段的数据(查询主键)
SQL
SELECT id,
user_id,
status
FROM usersMongoDB
db.users.find(
{},
{ user_id:1, status:1})查询所有指定字段的数据(不查询主键)
SQL
SELECT user_id, status
FROM usersMongoDB
db.users.find(
{},
{ user_id:1, status:1, _id:0})条件查询(字段为相应的内容)
SQL
SELECT *
FROM users
WHERE status ="A"MongoDB
db.users.find(
{ status:"A"})条件查询指定字段(字段为相应的内容)
SQL
SELECT user_id, status
FROM users
WHERE status ="A"MongoDB
db.users.find(
{ status:"A"},
{ user_id:1, status:1, _id:0}
)条件查询(字段不含相应的内容)
SQL
SELECT *
FROM users
WHERE status !="A"MongoDB
db.users.find(
{ status:{ $ne:"A"}}
)条件查询(与查询)
SQL
SELECT *
FROM users
WHERE status ="A"
AND age =50MongoDB
db.users.find(
{ status:"A",
age:50}
)条件查询(或查询)
SQL
SELECT *
FROM users
WHERE status ="A"
OR age =50MongoDB
db.users.find(
{ $or:[{ status:"A"},
{ age:50}]}
)条件查询(大于关系)
SQL
SELECT *
FROM users
WHERE age >25MongoDB
db.users.find(
{ age:{ $gt:25}}
)条件查询(小于关系)
SQL
SELECT *
FROM users
WHERE age <25MongoDB
db.users.find(
{ age:{ $lt:25}}
)条件查询(区间关系)
SQL
SELECT *
FROM users
WHERE age >25
AND age <=50MongoDB
db.users.find(
{ age:{ $gt:25, $lte:50}}
)模糊查询(包含)
SQL
SELECT *
FROM users
WHERE user_id like "%bc%"MongoDB
db.users.find({ user_id:/bc/})模糊查询(起始)
SQL
SELECT *
FROM users
WHERE user_id like "bc%"MongoDB
db.users.find({ user_id:/^bc/})升序处理查询结果
SQL
SELECT *
FROM usersWHERE status ="A"
ORDER BY user_id ASCMongoDB
db.users.find({ status:"A"}).sort({ user_id:1})降序处理查询结果
SQL
SELECT *
FROM users
WHERE status ="A"
ORDER BY user_id DESCMongoDB
db.users.find({ status:"A"}).sort({ user_id:-1})统计(所有条目)
SQL
SELECT COUNT(*)
FROM usersMongoDB
db.users.count()
// 或者
db.users.find().count()统计(指定字段)
SQL
SELECT COUNT(user_id)
FROM usersMongoDB
db.users.count({ user_id:{ $exists:true}})
// 或者
db.users.find({ user_id:{ $exists:true}}).count()统计符合指定条件的条目
SQL
SELECT COUNT(*)
FROM usersWHERE age >30MongoDB
db.users.count({ age:{ $gt:30}})
// 或者db.users.find({ age:{ $gt:30}}).count()去重查询
SQL
SELECT DISTINCT(status)
FROM usersMongoDB
db.users.distinct("status")查询单条数据
SQL
SELECT *
FROM users
LIMIT 1MongoDB
db.users.findOne()
// 或者db.users.find().limit(1)分页并跳过指定页数
SQL
SELECT *
FROM users
LIMIT 5SKIP 10MongoDB
db.users.find().limit(5).skip(10)语法性能测试
SQL
EXPLAIN SELECT *
FROM usersWHERE status ="A"MongoDB
db.users.find({ status:"A"}).explain()更新(静态值)
SQL
UPDATE users
SET status ="C"
WHERE age >25MongoDB
db.users.update(
{ age:{ $gt:25}},
{ $set:{ status:"C"}},
{ multi:true})更新(动态值)
SQL
UPDATE users
SET age = age +3
WHERE status ="A"MongoDB
db.users.update(
{ status:"A"},{ $inc:{ age:3}},
{ multi:true})条件删除
SQL
DELETE FROM users
WHERE status ="D"MongoDB
db.users.remove({ status:"D"})删除(所有记录)
SQL
DELETE FROM usersMongoDB
db.users.remove({})









