文档菜单
文档首页
/
MongoDB 手册
/

SQL到MongoDB映射图表

本页内容

  • 术语和概念
  • 可执行文件
  • 示例
  • 进一步阅读

除了以下图表外,您可能还想考虑以下内容:常见问题解答部分,其中包含有关MongoDB的常见问题的选择。

以下表格展示了各种SQL术语和概念及其对应的MongoDB术语和概念。

SQL术语/概念
MongoDB术语/概念
数据库
文档BSON文档
索引
表连接

主键

指定任何唯一的列或列组合为主键。

主键

在MongoDB中,主键自动设置为_id字段。

聚合(例如按分组)

聚合管道

请参阅SQL到聚合映射图表

SELECT INTO NEW_TABLE
MERGE INTO TABLE
UNION ALL
事务

事务

对于许多场景,去规范化数据模型(嵌入文档和数组)将继续是您的数据和用例的最佳选择,而不是多文档事务。也就是说,对于许多场景,适当地对数据进行建模将最小化对多文档事务的需求。

以下表格展示了某些数据库可执行文件及其对应的MongoDB可执行文件。此表并非详尽无遗。

MongoDB
MySQL
Oracle
Informix
DB2
数据库服务器
mysqld
oracle
IDS
DB2服务器
数据库客户端
mongosh
mysql
sqlplus
DB-Access
DB2客户端

以下表格展示了各种SQL语句及其对应的MongoDB语句。表中的示例假设以下条件

  • SQL示例假设有一个名为 people 的表。

  • MongoDB示例假设有一个名为 people 的集合,其中包含以下原型文档

    {
    _id: ObjectId("509a8fb2f3f4948bd2f983a0"),
    user_id: "abc123",
    age: 55,
    status: 'A'
    }

以下表格展示了与表级操作相关的各种SQL语句及其对应的MongoDB语句。

SQL模式语句
MongoDB模式语句
CREATE TABLE people (
id MEDIUMINT NOT NULL
AUTO_INCREMENT,
user_id Varchar(30),
age Number,
status char(1),
PRIMARY KEY (id)
)

在首次执行 insertOne()insertMany() 操作时隐式创建。如果未指定 _id 字段,则会自动添加主键 _id

db.people.insertOne( {
user_id: "abc123",
age: 55,
status: "A"
} )

然而,您也可以显式创建一个集合

db.createCollection("people")
ALTER TABLE people
ADD join_date DATETIME

集合不描述或强制执行其文档的结构;即,在集合级别没有结构变更。

然而,在文档级别,updateMany() 操作可以使用 $set 操作符向现有文档中添加字段。

db.people.updateMany(
{ },
{ $set: { join_date: new Date() } }
)
ALTER TABLE people
DROP COLUMN join_date

集合不描述或强制执行其文档的结构;即,在集合级别没有结构变更。

然而,在文档级别,updateMany() 操作可以使用 $unset 操作符从文档中删除字段。

db.people.updateMany(
{ },
{ $unset: { "join_date": "" } }
)
CREATE INDEX idx_user_id_asc
ON people(user_id)
db.people.createIndex( { user_id: 1 } )
CREATE INDEX
idx_user_id_asc_age_desc
ON people(user_id, age DESC)
db.people.createIndex( { user_id: 1, age: -1 } )
DROP TABLE people
db.people.drop()

有关使用的方法和操作符的更多信息,请参阅

提示

另请参阅

以下表格展示了与向表中插入记录相关的各种 SQL 语句及其对应的 MongoDB 语句。

SQL INSERT 语句
MongoDB insertOne() 语句
INSERT INTO people(user_id,
age,
status)
VALUES ("bcd001",
45,
"A")
db.people.insertOne(
{ user_id: "bcd001", age: 45, status: "A" }
)

有关更多信息,请参阅 db.collection.insertOne()

以下表格展示了与从表中读取记录相关的各种 SQL 语句及其对应的 MongoDB 语句。

注意

find() 方法始终在返回的文档中包含 _id 字段,除非通过 投影 明确排除。以下一些 SQL 查询可能包含 _id 字段以反映这一点,即使该字段不包括在相应的 find() 查询中。

SQL SELECT 语句
MongoDB find() 语句
SELECT *
FROM people
db.people.find()
SELECT id,
user_id,
status
FROM people
db.people.find(
{ },
{ user_id: 1, status: 1 }
)
SELECT user_id, status
FROM people
db.people.find(
{ },
{ user_id: 1, status: 1, _id: 0 }
)
SELECT *
FROM people
WHERE status = "A"
db.people.find(
{ status: "A" }
)
SELECT user_id, status
FROM people
WHERE status = "A"
db.people.find(
{ status: "A" },
{ user_id: 1, status: 1, _id: 0 }
)
SELECT *
FROM people
WHERE status != "A"
db.people.find(
{ status: { $ne: "A" } }
)
SELECT *
FROM people
WHERE status = "A"
AND age = 50
db.people.find(
{ status: "A",
age: 50 }
)
SELECT *
FROM people
WHERE status = "A"
OR age = 50
db.people.find(
{ $or: [ { status: "A" } , { age: 50 } ] }
)
SELECT *
FROM people
WHERE age > 25
db.people.find(
{ age: { $gt: 25 } }
)
SELECT *
FROM people
WHERE age < 25
db.people.find(
{ age: { $lt: 25 } }
)
SELECT *
FROM people
WHERE age > 25
AND age <= 50
db.people.find(
{ age: { $gt: 25, $lte: 50 } }
)
SELECT *
FROM people
WHERE user_id like "%bc%"
db.people.find( { user_id: /bc/ } )

-或-

db.people.find( { user_id: { $regex: /bc/ } } )
SELECT *
FROM people
WHERE user_id like "bc%"
db.people.find( { user_id: /^bc/ } )

-或-

db.people.find( { user_id: { $regex: /^bc/ } } )
SELECT *
FROM people
WHERE status = "A"
ORDER BY user_id ASC
db.people.find( { status: "A" } ).sort( { user_id: 1 } )
SELECT *
FROM people
WHERE status = "A"
ORDER BY user_id DESC
db.people.find( { status: "A" } ).sort( { user_id: -1 } )
SELECT COUNT(*)
FROM people
db.people.count()

db.people.find().count()
SELECT COUNT(user_id)
FROM people
db.people.count( { user_id: { $exists: true } } )

db.people.find( { user_id: { $exists: true } } ).count()
SELECT COUNT(*)
FROM people
WHERE age > 30
db.people.count( { age: { $gt: 30 } } )

db.people.find( { age: { $gt: 30 } } ).count()
SELECT DISTINCT(status)
FROM people
db.people.aggregate( [ { $group : { _id : "$status" } } ] )

或,对于不超过BSON 大小限制的独立值集

db.people.distinct( "status" )
SELECT *
FROM people
LIMIT 1
db.people.findOne()

db.people.find().limit(1)
SELECT *
FROM people
LIMIT 5
SKIP 10
db.people.find().limit(5).skip(10)
EXPLAIN SELECT *
FROM people
WHERE status = "A"
db.people.find( { status: "A" } ).explain()

有关使用的方法和操作符的更多信息,请参阅

以下表格展示了与在表中更新现有记录相关的各种 SQL 语句以及相应的 MongoDB 语句。

SQL 更新语句
MongoDB updateMany() 语句
UPDATE people
SET status = "C"
WHERE age > 25
db.people.updateMany(
{ age: { $gt: 25 } },
{ $set: { status: "C" } }
)
UPDATE people
SET age = age + 3
WHERE status = "A"
db.people.updateMany(
{ status: "A" } ,
{ $inc: { age: 3 } }
)

有关示例中使用的函数和运算符的更多信息,请参阅

以下表格展示了与从表中删除记录相关的各种 SQL 语句以及相应的 MongoDB 语句。

SQL 删除语句
MongoDB deleteMany() 语句
DELETE FROM people
WHERE status = "D"
db.people.deleteMany( { status: "D" } )
DELETE FROM people
db.people.deleteMany({})

有关更多信息,请参阅db.collection.deleteMany().

如果您正在考虑将您的SQL应用程序迁移到MongoDB,请下载MongoDB应用程序现代化指南

下载内容包括以下资源

  • MongoDB数据建模方法的演示文稿

  • 关于从关系数据库管理系统(RDBMS)迁移到MongoDB的最佳实践和白皮书

  • 带有其RDBMS等价的MongoDB引用模式

  • 应用程序现代化评分卡

返回

可重试读取