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 NULLAUTO_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"})// 当然也可以单独创建一个collectiondb.createCollection("users")
添加新列/字段
SQL
ALTER TABLE usersADD join_date DATETIME
MongoDB
// collection并不会对它的document结构进行约束// 在collection层面上并不会有结构的变化// 但是在document层面上,update()操作可以利用$set为现有的document添加fielddb.users.update({},{ $set:{ join_date:newDate()}},{ multi:true})
删除列/字段
SQL
ALTER TABLE usersDROP COLUMN join_date
MongoDB
// collection并不会对它的document结构进行约束// 在collection层面上并不会有结构的变化// 但是在document层面上,update()操作可以利用$unset为现有的document移除fielddb.users.update({},{ $unset:{ join_date:""}},{ multi:true})
创建索引
SQL
CREATE INDEX idx_user_id_ascON users(user_id)
MongoDB
db.users.createIndex({ user_id:1})
创建联合索引
SQL
CREATE INDEXidx_user_id_asc_age_descON users(user_id, age DESC)
MongoDB
db.users.createIndex({ user_id:1, age:-1})
删除表/集合
SQL
DROP TABLE users
MongoDB
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 users
MongoDB
db.users.find()
查询所有指定字段的数据(查询主键)
SQL
SELECT id,user_id,statusFROM users
MongoDB
db.users.find({},{ user_id:1, status:1})
查询所有指定字段的数据(不查询主键)
SQL
SELECT user_id, statusFROM users
MongoDB
db.users.find({},{ user_id:1, status:1, _id:0})
条件查询(字段为相应的内容)
SQL
SELECT *FROM usersWHERE status ="A"
MongoDB
db.users.find({ status:"A"})
条件查询指定字段(字段为相应的内容)
SQL
SELECT user_id, statusFROM usersWHERE status ="A"
MongoDB
db.users.find({ status:"A"},{ user_id:1, status:1, _id:0})
条件查询(字段不含相应的内容)
SQL
SELECT *FROM usersWHERE status !="A"
MongoDB
db.users.find({ status:{ $ne:"A"}})
条件查询(与查询)
SQL
SELECT *FROM usersWHERE status ="A"AND age =50
MongoDB
db.users.find({ status:"A",age:50})
条件查询(或查询)
SQL
SELECT *FROM usersWHERE status ="A"OR age =50
MongoDB
db.users.find({ $or:[{ status:"A"},{ age:50}]})
条件查询(大于关系)
SQL
SELECT *FROM usersWHERE age >25
MongoDB
db.users.find({ age:{ $gt:25}})
条件查询(小于关系)
SQL
SELECT *FROM usersWHERE age <25
MongoDB
db.users.find({ age:{ $lt:25}})
条件查询(区间关系)
SQL
SELECT *FROM usersWHERE age >25AND age <=50
MongoDB
db.users.find({ age:{ $gt:25, $lte:50}})
模糊查询(包含)
SQL
SELECT *FROM usersWHERE user_id like "%bc%"
MongoDB
db.users.find({ user_id:/bc/})
模糊查询(起始)
SQL
SELECT *FROM usersWHERE user_id like "bc%"
MongoDB
db.users.find({ user_id:/^bc/})
升序处理查询结果
SQL
SELECT *FROM usersWHERE status ="A"ORDER BY user_id ASC
MongoDB
db.users.find({ status:"A"}).sort({ user_id:1})
降序处理查询结果
SQL
SELECT *FROM usersWHERE status ="A"ORDER BY user_id DESC
MongoDB
db.users.find({ status:"A"}).sort({ user_id:-1})
统计(所有条目)
SQL
SELECT COUNT(*)FROM users
MongoDB
db.users.count()// 或者db.users.find().count()
统计(指定字段)
SQL
SELECT COUNT(user_id)FROM users
MongoDB
db.users.count({ user_id:{ $exists:true}})// 或者db.users.find({ user_id:{ $exists:true}}).count()
统计符合指定条件的条目
SQL
SELECT COUNT(*)FROM usersWHERE age >30
MongoDB
db.users.count({ age:{ $gt:30}})// 或者db.users.find({ age:{ $gt:30}}).count()
去重查询
SQL
SELECT DISTINCT(status)FROM users
MongoDB
db.users.distinct("status")
查询单条数据
SQL
SELECT *FROM usersLIMIT 1
MongoDB
db.users.findOne()// 或者db.users.find().limit(1)
分页并跳过指定页数
SQL
SELECT *FROM usersLIMIT 5SKIP 10
MongoDB
db.users.find().limit(5).skip(10)
语法性能测试
SQL
EXPLAIN SELECT *FROM usersWHERE status ="A"
MongoDB
db.users.find({ status:"A"}).explain()
更新(静态值)
SQL
UPDATE usersSET status ="C"WHERE age >25
MongoDB
db.users.update({ age:{ $gt:25}},{ $set:{ status:"C"}},{ multi:true})
更新(动态值)
SQL
UPDATE usersSET age = age +3WHERE status ="A"
MongoDB
db.users.update({ status:"A"},{ $inc:{ age:3}},{ multi:true})
条件删除
SQL
DELETE FROM usersWHERE status ="D"
MongoDB
db.users.remove({ status:"D"})
删除(所有记录)
SQL
DELETE FROM users
MongoDB
db.users.remove({})
这篇博客整理了SQL到MongoDB的转换语法,包括新建集合、添加/删除字段、索引操作、查询、更新和删除等,方便学习和查询。还包含了条件查询、模糊查询、统计和排序等功能的对应语法。

4979

被折叠的 条评论
为什么被折叠?



