- MongoDB官方文档中文版
- MongoDB中文手册说明
- MongoDB简介
- 安装 MongoDB
- The mongo Shell
- MongoDB CRUD 操作
- 聚合
- 数据模型
- 事务
- 索引
- 安全
- 安全检查列表
- 启用访问控制
- 身份验证
- 基于角色的访问控制
- TLS / SSL(传输加密)
- 静态加密
- 客户端字段级加密
- 审计
- 网络和配置强化
- 实现字段级别修订
- 安全参考
- 附录
- 变更流
- 复制
- 分片
- 分片键
- 哈希分片
- 范围分片
- 区
- 管理分片区
- 按位置细分数据
- 用于更改SLA或SLO的分层硬件
- 按应用或客户细分数据
- 仅插入工作负载的分布式本地写入
- 管理分片区
- 使用块进行数据分区
- 在分片集群中拆分数据块
- 管理
- 存储
- 存储引擎
- 日志记录
- 管理日志记录
- GridFS
- FAQ:MongoDB 存储
- 存储引擎
- 参考
- 运算符
- 查询与映射运算符
- 更新运算符
- 聚合管道阶段
- 聚合管道操作符
- $abs (aggregation)
- $acos (aggregation)
- $acosh (aggregation)
- $add (aggregation)
- $addToSet (aggregation)
- $allElementsTrue (aggregation)
- $and (aggregation)
- $anyElementTrue (aggregation)
- $arrayElemAt (aggregation)
- $arrayToObject (aggregation)
- $asin (aggregation)
- $asinh (aggregation)
- $atan (aggregation)
- $atan2 (aggregation)
- $atanh (aggregation)
- $avg (aggregation)
- $ceil (aggregation)
- $cmp (aggregation)
- $concat (aggregation)
- $concatArrays (aggregation)
- $cond (aggregation)
- $convert (aggregation)
- $cos (aggregation)
- $dateFromParts (aggregation)
- $dateToParts (aggregation)
- $dateFromString (aggregation)
- $literal (aggregation)
- 查询修饰符
- 数据库命令
- 聚合命令
- 地理空间命令
- 查询和写操作命令
- 查询计划缓存命令
- 认证命令
- 用户管理命令
- 角色管理命令
- 复制命令
- 分片命令
- 会话命令
- 管理命令
- 诊断命令
- 免费监控命令
- 系统事件审计命令
- mongo Shell 方法
- 集合方法
- db.collection.aggregate()
- db.collection.bulkWrite()
- db.collection.copyTo()
- db.collection.count()
- db.collection.countDocuments()
- db.collection.estimatedDocumentCount()
- db.collection.createIndex()
- db.collection.createIndexes()
- db.collection.dataSize()
- db.collection.deleteOne()
- db.collection.deleteMany()
- db.collection.distinct()
- db.collection.drop()
- db.collection.dropIndex()
- db.collection.dropIndexes()
- db.collection.ensureIndex()
- db.collection.explain()
- db.collection.find()
- db.collection.findAndModify()
- db.collection.findOne()
- db.collection.findOneAndDelete()
- db.collection.findOneAndReplace()
- db.collection.findOneAndUpdate()
- db.collection.getIndexes()
- db.collection.getShardDistribution()
- db.collection.getShardVersion()
- db.collection.insert()
- db.collection.insertOne()
- db.collection.insertMany()
- db.collection.isCapped()
- db.collection.latencyStats()
- db.collection.mapReduce()
- db.collection.reIndex()
- db.collection.remove()
- db.collection.renameCollection()
- db.collection.replaceOne()
- db.collection.save()
- db.collection.stats()
- db.collection.storageSize()
- db.collection.totalIndexSize()
- db.collection.totalSize()
- db.collection.update()
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.watch()
- db.collection.validate()
- 词汇表
- 默认的MongoDB端口
- 默认的MongoDB读/写关注
- 服务器会话
- MongoDB驱动
- FAQ
- 联系我们
- 更多资料
- [快学Mongo]
- [Mongo问题讨论区]
- [Mongo 驱动使用手册]
- 本书使用 GitBook 发布
SQL到MongoDB的映射图表
SQL到MongoDB的映射图表
在本页面
除了下面的图表之外,您可能需要考虑有关MongoDB的常见问题的常见问题部分。
术语和概念
下表介绍了各种SQL术语和概念以及相应的MongoDB术语和概念。
SQL术语/概念 | MongoDB术语/概念 |
---|---|
database | database |
table | collection |
row | document or BSON document |
column | field |
index | index |
table joins | $lookup, 嵌入文档 |
primary key (指定任何唯一的列或列组合作为主键。) | primary key (在MongoDB中,主键自动设置为_id字段。) |
aggregation (e.g. group by) | aggregation pipeline See the SQL to Aggregation Mapping Chart. |
SELECT INTO NEW_TABLE | $out See the SQL to Aggregation Mapping Chart. |
MERGE INTO TABLE | $merge (Available starting in MongoDB 4.2) See the SQL to Aggregation Mapping Chart. |
Transactions | transactions 在许多情况下,非规范化数据模型(嵌入式文档和数组) 将继续是您数据和用例的最佳选择,而不是多文档事务。 也就是说,在许多情况下,对数据进行适当的建模将最 大程度地减少对多文档交易的需求。 |
可执行文件
下表展示了一些数据库可执行文件和相应的MongoDB可执行文件。这个表格并不是详尽无遗的。
MongoDB | MySQL | Oracle | Informix | DB2 | |
---|---|---|---|---|---|
Database Server | mongod | mysqld | oracle | IDS | DB2 Server |
Database Client | mongo | mysql | sqlplus | DB-Access | DB2 Client |
例子
下表展示了各种SQL语句和相应的MongoDB语句。表中的例子假设以下条件:
- SQL示例假设有一个名为people的表。
- MongoDB示例假设一个名为people的集合,它包含以下原型的文档:
{
_id: ObjectId("509a8fb2f3f4948bd2f983a0"),
user_id: "abc123",
age: 55,
status: 'A'
}
创建和修改
下表展示了与表级操作相关的各种SQL语句以及相应的MongoDB语句。
SQL Schema语句 | MongoDB Schema语句 |
---|---|
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() |
有关使用的方法和运算符的更多信息,请参见:
db.collection.insertOne() | db.collection.updateMany() | $set |
db.collection.insertMany() | db.collection.createIndex() | $unset |
db.createCollection() | db.collection.drop() |
另看:
插入
下表显示了与将记录插入表和相应的MongoDB语句有关的各种SQL语句。
SQL INSERT语句 | MongoDB insertOne() Statements |
---|---|
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( { userid: /bc/ } ) _or db.people.find( { user_id: { $regex: /bc/ } } ) |
SELECT FROM people WHERE user_id like "bc%" | db.people.find( { userid: /^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( { userid: { $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, for distinct value sets that do not exceed the BSON size limit db.people.distinct( "status" ) |
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() | .$ne |
.db.collection.distinct() | .$and |
.db.collection.findOne() | .$or |
.limit() | .$gt |
.skip() | .$lt |
.explain() | .$exists |
.sort() | .$lte |
.count() | .$regex |
另看:
更新记录
下表显示了与更新表中的现有记录和相应的MongoDB语句有关的各种SQL语句。
SQL Update Statements | MongoDB updateMany() Statements |
---|---|
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 } } ) |
有关示例中使用的方法和运算符的更多信息,请参见:
另看:
删除记录
下表显示了与从表中删除记录和相应的MongoDB语句有关的各种SQL语句。
SQL Delete Statements | MongoDB deleteMany() Statements |
---|---|
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的最佳实践和注意事项
- 参考MongoDB模式及其等效RDBMS
- 应用程序现代化记分卡
译者:杨帅
校对:杨帅
Copyright © 上海锦木信息技术有限公司 all right reserved,由 MongoDB汉化小组 提供技术支持文件修订时间: 2020-10-11 20:53:05