欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL转 MongoDB语法速查表 博客分类: python&nodejs mongodb 语法 

程序员文章站 2024-03-21 11:13:16
...

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,它的文档包含如下属性

  1. {
  2. _id:ObjectId("509a8fb2f3f4948bd2f983a0"),
  3. user_id:"abc123",
  4. age:55,
  5. status:'A'
  6. }

新建表/集合

SQL

  1. CREATE TABLE users (
  2. id MEDIUMINT NOT NULL
  3. AUTO_INCREMENT,
  4. user_id Varchar(30),
  5. age Number,
  6. status char(1),
  7. PRIMARY KEY (id)
  8. )

MongoDB

  1. // 在第一次进行insert()操作的时候会进行隐式创建。
  2. // 如果不指定_id字段的话,_id将会被自动创建
  3. db.users.insert({
  4. user_id:"abc123",
  5. age:55,
  6. status:"A"
  7. })
  8. // 当然也可以单独创建一个collection
  9. db.createCollection("users")

添加新列/字段

SQL

  1. ALTER TABLE users
  2. ADD join_date DATETIME

MongoDB

  1. // collection并不会对它的document结构进行约束
  2. // 在collection层面上并不会有结构的变化
  3. // 但是在document层面上,update()操作可以利用$set为现有的document添加field
  4. db.users.update(
  5. {},
  6. { $set:{ join_date:newDate()}},
  7. { multi:true}
  8. )

删除列/字段

SQL

  1. ALTER TABLE users
  2. DROP COLUMN join_date

MongoDB

  1. // collection并不会对它的document结构进行约束
  2. // 在collection层面上并不会有结构的变化
  3. // 但是在document层面上,update()操作可以利用$unset为现有的document移除field
  4. db.users.update(
  5. {},
  6. { $unset:{ join_date:""}},
  7. { multi:true}
  8. )

创建索引

SQL

  1. CREATE INDEX idx_user_id_asc
  2. ON users(user_id)

MongoDB

  1. db.users.createIndex({ user_id:1})

创建联合索引

SQL

  1. CREATE INDEX
  2. idx_user_id_asc_age_desc
  3. ON users(user_id, age DESC)

MongoDB

  1. db.users.createIndex({ user_id:1, age:-1})

删除表/集合

SQL

  1. DROP TABLE users

MongoDB

  1. db.users.drop()

插入

SQL

  1. INSERT INTO users(user_id,
  2. age,
  3. status)
  4. VALUES ("bcd001",
  5. 45,
  6. "A")

MongoDB

  1. db.users.insert(
  2. { user_id:"bcd001", age:45, status:"A"}
  3. )

查询所有的数据

SQL

  1. SELECT *
  2. FROM users

MongoDB

  1. db.users.find()

查询所有指定字段的数据(查询主键)

SQL

  1. SELECT id,
  2. user_id,
  3. status
  4. FROM users

MongoDB

  1. db.users.find(
  2. {},
  3. { user_id:1, status:1}
  4. )

查询所有指定字段的数据(不查询主键)

SQL

  1. SELECT user_id, status
  2. FROM users

MongoDB

  1. db.users.find(
  2. {},
  3. { user_id:1, status:1, _id:0}
  4. )

条件查询(字段为相应的内容)

SQL

  1. SELECT *
  2. FROM users
  3. WHERE status ="A"

MongoDB

  1. db.users.find(
  2. { status:"A"}
  3. )

条件查询指定字段(字段为相应的内容)

SQL

  1. SELECT user_id, status
  2. FROM users
  3. WHERE status ="A"

MongoDB

  1. db.users.find(
  2. { status:"A"},
  3. { user_id:1, status:1, _id:0}
  4. )

条件查询(字段不含相应的内容)

SQL

  1. SELECT *
  2. FROM users
  3. WHERE status !="A"

MongoDB

  1. db.users.find(
  2. { status:{ $ne:"A"}}
  3. )

条件查询(与查询)

SQL

  1. SELECT *
  2. FROM users
  3. WHERE status ="A"
  4. AND age =50

MongoDB

  1. db.users.find(
  2. { status:"A",
  3. age:50}
  4. )

条件查询(或查询)

SQL

  1. SELECT *
  2. FROM users
  3. WHERE status ="A"
  4. OR age =50

MongoDB

  1. db.users.find(
  2. { $or:[{ status:"A"},
  3. { age:50}]}
  4. )

条件查询(大于关系)

SQL

  1. SELECT *
  2. FROM users
  3. WHERE age >25

MongoDB

  1. db.users.find(
  2. { age:{ $gt:25}}
  3. )

条件查询(小于关系)

SQL

  1. SELECT *
  2. FROM users
  3. WHERE age <25

MongoDB

  1. db.users.find(
  2. { age:{ $lt:25}}
  3. )

条件查询(区间关系)

SQL

  1. SELECT *
  2. FROM users
  3. WHERE age >25
  4. AND age <=50

MongoDB

  1. db.users.find(
  2. { age:{ $gt:25, $lte:50}}
  3. )

模糊查询(包含)

SQL

  1. SELECT *
  2. FROM users
  3. WHERE user_id like "%bc%"

MongoDB

  1. db.users.find({ user_id:/bc/})

模糊查询(起始)

SQL

  1. SELECT *
  2. FROM users
  3. WHERE user_id like "bc%"

MongoDB

  1. db.users.find({ user_id:/^bc/})

升序处理查询结果

SQL

  1. SELECT *
  2. FROM users
  3. WHERE status ="A"
  4. ORDER BY user_id ASC

MongoDB

  1. db.users.find({ status:"A"}).sort({ user_id:1})

降序处理查询结果

SQL

  1. SELECT *
  2. FROM users
  3. WHERE status ="A"
  4. ORDER BY user_id DESC

MongoDB

  1. db.users.find({ status:"A"}).sort({ user_id:-1})

统计(所有条目)

SQL

  1. SELECT COUNT(*)
  2. FROM users

MongoDB

  1. db.users.count()
  2. // 或者
  3. db.users.find().count()

统计(指定字段)

SQL

  1. SELECT COUNT(user_id)
  2. FROM users

MongoDB

  1. db.users.count({ user_id:{ $exists:true}})
  2. // 或者
  3. db.users.find({ user_id:{ $exists:true}}).count()

统计符合指定条件的条目

SQL

  1. SELECT COUNT(*)
  2. FROM users
  3. WHERE age >30

MongoDB

  1. db.users.count({ age:{ $gt:30}})
  2. // 或者
  3. db.users.find({ age:{ $gt:30}}).count()

去重查询

SQL

  1. SELECT DISTINCT(status)
  2. FROM users

MongoDB

  1. db.users.distinct("status")

查询单条数据

SQL

  1. SELECT *
  2. FROM users
  3. LIMIT 1

MongoDB

  1. db.users.findOne()
  2. // 或者
  3. db.users.find().limit(1)

分页并跳过指定页数

SQL

  1. SELECT *
  2. FROM users
  3. LIMIT 5
  4. SKIP 10

MongoDB

  1. db.users.find().limit(5).skip(10)

语法性能测试

SQL

  1. EXPLAIN SELECT *
  2. FROM users
  3. WHERE status ="A"

MongoDB

  1. db.users.find({ status:"A"}).explain()

更新(静态值)

SQL

  1. UPDATE users
  2. SET status ="C"
  3. WHERE age >25

MongoDB

  1. db.users.update(
  2. { age:{ $gt:25}},
  3. { $set:{ status:"C"}},
  4. { multi:true}
  5. )

更新(动态值)

SQL

  1. UPDATE users
  2. SET age = age +3
  3. WHERE status ="A"

MongoDB

  1. db.users.update(
  2. { status:"A"},
  3. { $inc:{ age:3}},
  4. { multi:true}
  5. )

条件删除

SQL

  1. DELETE FROM users
  2. WHERE status ="D"

MongoDB

  1. db.users.remove({ status:"D"})

删除(所有记录)

SQL

  1. DELETE FROM users

MongoDB

  1. db.users.remove({})
相关标签: mongodb 语法