千家信息网

如何理解SQL跟MongoDB的关系

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,今天就跟大家聊聊有关如何理解SQL跟MongoDB的关系,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言很多开发者首次接触数据库(通常是在高
千家信息网最后更新 2025年11月07日如何理解SQL跟MongoDB的关系

今天就跟大家聊聊有关如何理解SQL跟MongoDB的关系,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

前言

很多开发者首次接触数据库(通常是在高校课堂)的概念,或者说接触第一个数据库,通常是 SQL 数据库,而现在,NoSQL 数据库后来居上,很多原 SQL 数据的使用者难免有转向 NoSQL 的需求。而作为 NoSQL 数据库的代表,MongoDB 在社区越来越流行,生产环境的使用也日益广泛。

对于 SQL 转战 NoSQL的开发人员来说,最难的一步其实是将原有的 SQL 的概念和知识直接复用过来,最大化的减小学习的成本。

其实,这一步 MongoDB 官方已经为大家考虑到了,那就是在:MongoDB CRUD Operations > MongoDB CRUD Operations > SQL to MongoDB Mapping Chart,这篇文档非常好的总结了 SQL 对应 MongoDB 的术语和概念,还有可执行文件、SQL 语句/MongoDB 语句等,

可以说对于 SQL 数据库开发人员,如果理解了他们之间的对应关系,那么就一只脚就迈进了 MongoDB 的大门。

Terminology and Concepts

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

TIP

在许多情况下, 非规范化数据模型(嵌入式文档和数组) denormalized data model (embedded documents and arrays) 将继续是您数据和用例的最佳选择,而不是多文档事务. 也就是说,对于许多场景,对数据进行适当的建模将最大限度地减少对 多文档事务(multi-document transactions)的需求。

Executables

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

Examples

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

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

  • MongoDB 的示例假定一个名为 people 的集合包含以下原型的文档:

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

Create and Alter

CREATE TABLE

SQL 模式语句:

CREATE TABLE people (     id MEDIUMINT NOT NULL         AUTO_INCREMENT,     user_id Varchar(30),     age Number,     status char(1),     PRIMARY KEY (id) )

MongoDB 模式语句:

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

在第一个 insertOne() 或 insertMany() 操作上隐式创建。 如果没有指定 _id 字段,则自动添加主键 _id。

但是,您也可以显式地创建一个集合:

db.createCollection("people")

ALTER TABLE / ADD

SQL模式语句:

ALTER TABLE people ADD join_date DATETIME

MongoDB 模式语句:

db.people.updateMany(     { },     { $set: { join_date: new Date() } } )

集合不描述或强制执行其文档的结构;也就是说,在集合级别上没有结构上的改变。

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

ALTER TABLE / DROP COLUMN

SQL模式语句:

ALTER TABLE people DROP COLUMN join_date

MongoDB 模式语句:

db.people.updateMany(     { },     { $unset: { "join_date": "" } } )

集合不描述或强制执行其文档的结构;也就是说,在集合级别上没有结构上的改变。

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

CREATE INDEX

SQL 模式语句:

CREATE INDEX idx_user_id_asc ON people(user_id)

MongoDB 模式语句:

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

CREATE INDEX / Multi

SQL模式语句:

CREATE INDEX idx_user_id_asc_age_descON people(user_id, age DESC)

MongoDB 模式语句:

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

DROP TABLE

SQL模式语句:

DROP TABLE people

MongoDB 模式语句:

db.people.drop()

Insert

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

SQL INSERT 语句

INSERT INTO people(user_id,                   age,                   status) VALUES ("bcd001",         45,         "A")

Mongodb insertOne() 语句

db.people.insertOne(    { user_id: "bcd001", age: 45, status: "A" } )

Select

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

NOTE:

  • find() 方法总是包含返回文档中的 _id 字段,除非通过 projection 特别排除。 下面的一些 SQL 查询可能包含一个 _id 字段来反映这一点,即使该字段没有包含在相应的 find() 查询中。

SELECT ... WHERE

SQL 语句

SELECT user_id, status FROM people WHERE status = "A"

Mongodb 语句

db.people.find(     { status: "A" },     { user_id: 1, status: 1, _id: 0 } )

SELECT ... AND

SQL 语句

SELECT * FROM people WHERE age > 25 AND   age <= 50

Mongodb 语句

db.people.find(    { age: { $gt: 25, $lte: 50 } } )

SELECT ... OR

SQL 语句

SELECT * FROM people WHERE status = "A" OR age = 50

Mongodb 语句

db.people.find(     { $or: [ { status: "A" } , { age: 50 } ] } )

SELECT ... LIKE

SQL 语句

FROM people WHERE user_id like "%bc%"

Mongodb 语句

db.people.find( { user_id: /bc/ } )  -or-  db.people.find( { user_id: { $regex: /bc/ } } )

SELECT ... OEDER BY

SQL 语句

SELECT * FROM people WHERE status = "A" ORDER BY user_id ASC

Mongodb 语句

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

SELECT ... COUNT

SQL 语句

SELECT COUNT(user_id) FROM people

Mongodb 语句

db.people.count( { user_id: { $exists: true } } )  or  db.people.find( { user_id: { $exists: true } } ).count()

SELECT DISTINCT

SQL 语句

SELECT DISTINCT(status) FROM people

Mongodb 语句

db.people.aggregate( [ { $group : { _id : "$status" } } ] )  或者,对于不同的不超过 [BSON 大小限制](https://docs.mongodb.com/manual/reference/limits/#limit-bson-document-size) 的值集  db.people.distinct( "status" )

SELECT ... LIMIT SKIP

SQL 语句

SELECT * FROM people LIMIT 5 SKIP 10

Mongodb 语句

db.people.find().limit(5).skip(10)

EXPLAIN SELECT

SQL 语句

EXPLAIN SELECT * FROM people WHERE status = "A"

Mongodb 语句

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

Update Records

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

UPDATE ... SET

SQL 语句

UPDATE people SET status = "C" WHERE age > 25

Mongodb 语句

db.people.updateMany(    { age: { $gt: 25 } },    { $set: { status: "C" } } )

UPDATE ... INC

SQL 语句

UPDATE people SET age = age + 3 WHERE status = "A"

Mongodb 语句

db.people.updateMany(    { status: "A" } ,    { $inc: { age: 3 } } )

Delete Records

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

DELETE WHERE

SQL 语句

DELETE FROM peopleWHERE status = "D"

Mongodb 语句

db.people.deleteMany( { status: "D" } )

DELETE

SQL 语句

DELETE FROM people

Mongodb 语句

db.people.deleteMany({})

看到这里,想必大家应该已经将脑海中 SQL 相关的知识和 MongoDB 一一对应起来了,那么剩下的就需要大家多多的实践,深入挖掘。

看完上述内容,你们对如何理解SQL跟MongoDB的关系有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

语句 文档 模式 数据 数据库 字段 概念 级别 结构 也就是 也就是说 内容 文件 术语 知识 开发 最大 事务 人员 操作符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网信吉林网络安全法 网易服务器怎么炸的 网络安全纳入审计依据 服务器价格差异 武汉智能教学软件开发 两台服务器之间复制文件命令 阿迪软件开发面试 潮州通信软件开发平均价格 互联网数据库第二章试题 闵行区网络技术服务优势 恢复数据库备份的sql语录 网络安全专项整治主题班会 php 服务器接口开发 大学辅导员笔试网络安全教育 微信圈子用的什么数据库 阳泉天创软件开发有限公司 国际网络安全资料 分配资源的数据库 安徽计算机软件开发费用是多少 软件开发公司的国家标准 网络安全法由多少章 多少条 阿迪软件开发面试 自动预约挂号系统软件开发 网络安全小视频软件 rust服务器老是断开链接 长春宝德网络技术公司 上海夺汇网络技术有限公司官方 福建安全云空间工具服务器 服务器转接矿池有什么用 网络安全知识提升多选题答案
0