SQL到MongoDB的映射表


进入MongoDB中文手册(4.2版本)目录

除了下面的图表,有关MongoDB的常见问题您可以参考“ 常见问题”。

1 术语和概念

下表介绍了各种SQL术语和概念以及相应的MongoDB术语和概念。

SQL术语/概念MongoDB术语/概念
数据库数据库
集合
文档 or BSON 文档
字段(field)
索引索引
表连接$lookup, 嵌入文档
主键
指定任何唯一的列或列组合作为主键。
主键
在MongoDB中,主键自动设置为 _id字段。
聚合(例如group by)聚合管道
请参见SQL到聚合的映射表
SELECT INTO NEW_TABLE$out
请参见SQL到聚合的映射表
MERGE INTO TABLE$merge (MongoDB 4.2开始可用)
请参见SQL到聚合的映射表
事务事务
提示:
在许多情况下,非规范化数据模型(嵌入式文档和数组) 将继续是您数据和用例的最佳选择,而不是多文档事务。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档事务的需求。

2 可执行文件

下表显示了一些数据库可执行文件和相应的MongoDB可执行文件。该表并非详尽无遗。

\MongoDBMySQLOracleInformixDB2
数据库服务端mongodmysqldoracleIDSDB2 Server
数据库客户端mongomysqlsqlplusDB-AccessDB2 Client

3 示例

下表显示了各种SQL语句和相应的MongoDB语句。表格中的示例假定以下条件:

  • SQL示例假定一个名为people的表。
  • MongoDB示例假定一个名为people的集合,其中包含以下原型的文档:
{
  _id: ObjectId("509a8fb2f3f4948bd2f983a0"),
  user_id: "abc123",
  age: 55,
  status: 'A'
}

3.1 创建和更改

下表列出了与表级操作有关的各种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() or 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 peopledb.people.drop()

有关方法和运算符的更多信息,请参见:

  • db.collection.insertOne();
  • db.collection.insertMany();
  • db.createCollection();
  • db.collection.updateMany();
  • db.collection.createIndex();
  • db.collection.drop();
  • $set;
  • $unset。

也可以看看:

  • 数据库和集合;
  • 文档;
  • 索引;
  • 数据建模概念。

3.2 插入

下表显示了与将记录插入表有关的各种SQL语句和相应的MongoDB语句。

SQL插入语句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()。
也可以看看:

  • 插入文档;
  • db.collection.insertMany();
  • 数据库和集合;
  • 文档。

3.3 查询

下表显示了与从表中读取记录相关的各种SQL语句和相应的MongoDB语句。

注意
除非通过投影明确排除,否则该find()方法始终将_id字段包含在返回的文档中 。即使某些字段不包含在相应find()的查询中,下面的某些SQL查询也可能包含一个_id字段。

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/ } )
  -or-
db.people.find( { user_id: { $regex: /bc/ } } )
SELECT *
FROM people
WHERE user_id like “bc%”
db.people.find( { user_id: /^bc/ } )
  -or-
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()
  or
db.people.find().count()
SELECT COUNT(user_id)
FROM people
db.people.count( { user_id: { $exists: true } } )
  or
db.people.find( { user_id: { $exists: true } } ).count()
SELECT COUNT(*)
FROM people
WHERE age > 30
db.people.count( { age: { $gt: 30 } } )
  or
db.people.find( { age: { $gt: 30 } } ).count()
SELECT DISTINCT(status)
FROM people
db.people.aggregate( [ { $group : { _id : “$status” } } ] )
 or
db.people.distinct( “status” )
distinct结果集不超过BSON的限制
SELECT *
FROM people
LIMIT 1

db.people.findOne()
 or
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()

有关的方法和运算符的更多信息,请参见:

  • db.collection.find();
  • db.collection.distinct();
  • db.collection.findOne();
  • limit();
  • skip();
  • explain();
  • sort();
  • count();
  • $ne;
  • $and;
  • $or;
  • $gt;
  • $lt;
  • $exists;
  • $lte;
  • $regex。
    也可以看看:
  • 查询文档;
  • 查询和投影运算符;
  • mongo Shell方法。

3.4 修改

下表显示了修改表中的现有记录有关的各种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 } }
)

有关示例中的方法和运算符的更多信息,请参见:

  • db.collection.updateMany();
  • $gt;
  • $set;
  • $inc
    也可以看看:
  • 修改文档;
  • 修改运算符;
  • db.collection.updateOne();
  • db.collection.replaceOne()。

3.5 删除

下表显示了从表中删除记录有关的各种SQL语句和相应的MongoDB语句。

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

有关更多信息,请参见db.collection.deleteMany()。
也可以看看

  • 删除文档;
  • db.collection.deleteOne()。

4 进一步阅读

如果您正在考虑将SQL应用程序迁移到MongoDB,请下载《MongoDB应用程序现代化指南》(MongoDB Application Modernization Guide
下载内容包括以下资源:

  • 演示使用MongoDB进行数据建模的方法;
  • 白皮书涵盖了从RDBMS数据模型迁移到MongoDB的最佳实践和注意事项;
  • 参考和RDBMS等效的MongoDB模式;
  • 应用程序现代化记分卡。

进入MongoDB中文手册(4.2版本)目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值