SQL与mongoDB对比及映射

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: mongoDB是最接近与关系型数据库的开源NoSQL数据库,几乎绝大多数常用的命令或语句在SQL中都可以找到相应的对应或映射。

mongoDB是最接近与关系型数据库的开源NoSQL数据库,几乎绝大多数常用的命令或语句在SQL中都可以找到相应的对应或映射。本文主要与MySQL做了些参照,供大家参考。

一、逻辑对象术语

SQL Terms/Concepts                      MongoDB Terms/Concepts
-------------------                     -----------------------------------
database                                  database
table                                     collection
row                                       document or BSON document
column                                    field
index                                     index
table joins                               embedded documents and linking
primary key(指定一个唯一列或复合列)         primary key(由_id自动生成)
aggregation (e.g. group by)               aggregation pipeline 

二、可执行程序对照

                MongoDB      MySQL        Oracle         Informix           DB2
                -----------  ----------   ----------   --------------   ------------
Database Server mongod       mysqld       oracle         IDS                DB2 Server
Database Client mongo        mysql        sqlplus        DB-Access        DB2 Client      

三、表级别对照

SQL语句                                        mongoDB java script shell
---------------------------------------        --------------------------------------------------
CREATE TABLE users (                           db.users.insert( {    
    id MEDIUMINT NOT NULL                          user_id: "abc123",
        AUTO_INCREMENT,                            age: 55,          
    user_id Varchar(30),                           status: "A"       
    age Number,                                 } )                  
    status char(1),                            //也可以使用下面的方式来创建集合,不过没有结构,即free-schema
    PRIMARY KEY (id)                           db.createCollection("users")
)

//表修改(增加列) Blog:http://blog.csdn.net/leshami
---------------------------------------        --------------------------------------------------
ALTER TABLE users                              db.users.update(                        
ADD join_date DATETIME                             { },                                
                                                   { $set: { join_date: new Date() } },
                                                   { multi: true }                     
                                               ) //由于集合无模式,可以直接通过update $set修改器来增加键  

//表修改(删除列)              
---------------------------------------        --------------------------------------------------
ALTER TABLE users                              db.users.update(                  
DROP COLUMN join_date                              { },                                                                     
                                                   { $unset: { join_date: "" } },
                                                   { multi: true }               
                                               ) //同表增加列,不过此时使用unset修改器

//创建索引  Author : Leshami
---------------------------------------        --------------------------------------------------
CREATE INDEX idx_user_id_asc                   db.users.createIndex( { user_id: 1 } )
ON users(user_id)                      

//创建索引(多列倒序)
---------------------------------------        --------------------------------------------------
CREATE INDEX                                   db.users.createIndex( { user_id: 1, age: -1 } )
       idx_user_id_asc_age_desc                                              
ON users(user_id, age DESC)          

四、记录插入对照

SQL语句                                        mongoDB java script shell
---------------------------------------        --------------------------------------------------     
INSERT INTO users(user_id,                     db.users.insert(                               
                  age,                            { user_id: "bcd001", age: 45, status: "A" }
                  status)                      )                                             
VALUES ("bcd001",
        45,
        "A")          

五、记录查询对照

SQL语句                                        mongoDB java script shell
---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find()
FROM users

---------------------------------------        --------------------------------------------------  
SELECT id,                                     db.users.find(                 
       user_id,                                    { },                       
       status                                      { user_id: 1, status: 1 }  
FROM users                                     )                              

---------------------------------------        --------------------------------------------------  
SELECT user_id, status                         db.users.find(                           
FROM users                                         { },                             
                                                   { user_id: 1, status: 1, _id: 0 }
                                               )                                    

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find(        
FROM users                                         { status: "A" }   
WHERE status = "A"                             )                     

---------------------------------------        --------------------------------------------------  
SELECT user_id, status                         db.users.find(                        
FROM users                                         { status: "A" },                  
WHERE status = "A"                                 { user_id: 1, status: 1, _id: 0 } 
                                               )                                     

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find(                 
FROM users                                         { status: { $ne: "A" } }   
WHERE status != "A"                            )                              

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find(       
FROM users                                         { status: "A",   
WHERE status = "A"                                   age: 50 }      
AND age = 50                                   )                    

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find(                
FROM users                                         { $or: [ { status: "A" } ,
WHERE status = "A"                                          { age: 50 } ] }  
OR age = 50                                    )                             

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find(           
FROM users                                         { age: { $gt: 25 } } 
WHERE age > 25                                 )                        

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find(          
FROM users                                        { age: { $lt: 25 } } 
WHERE age < 25                                 )                       

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find(                   
FROM users                                        { age: { $gt: 25, $lte: 50 } }
WHERE age > 25                                 )                                
AND   age <= 50

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find( { user_id: /bc/ } )
FROM users
WHERE user_id like "%bc%"

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find( { user_id: /^bc/ } )   
FROM users
WHERE user_id like "bc%"

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find( { status: "A" } ).sort( { user_id: 1 } )  
FROM users
WHERE status = "A"
ORDER BY user_id ASC

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find( { status: "A" } ).sort( { user_id: -1 } ) 
FROM users
WHERE status = "A"
ORDER BY user_id DESC

---------------------------------------        --------------------------------------------------  
SELECT COUNT(*)                                db.users.count()         
FROM users                                     or  db.users.find().count()                    

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

---------------------------------------        --------------------------------------------------  
SELECT COUNT(*)                                db.users.count( { age: { $gt: 30 } } )       
FROM users                                     or  db.users.find( { age: { $gt: 30 } } ).count()                                         
WHERE age > 30                                                                              

---------------------------------------        --------------------------------------------------  
SELECT DISTINCT(status)                        db.users.distinct( "status" )    
FROM users

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.findOne()       
FROM users                                     or db.users.find().limit(1)                      
LIMIT 1                                                                 

---------------------------------------        --------------------------------------------------  
SELECT *                                       db.users.find().limit(5).skip(10)
FROM users
LIMIT 5
SKIP 10

---------------------------------------        --------------------------------------------------  
EXPLAIN SELECT *                               db.users.find( { status: "A" } ).explain()    
FROM users
WHERE status = "A"

六、记录更新对照

SQL语句                                        mongoDB java script shell
---------------------------------------        --------------------------------------------------
UPDATE users                                   db.users.update(                   
SET status = "C"                                  { age: { $gt: 25 } },         
WHERE age > 25                                    { $set: { status: "C" } },    
                                                  { multi: true }               
                                               )                                

---------------------------------------        --------------------------------------------------
UPDATE users                                   db.users.update(         
SET age = age + 3                                 { status: "A" } ,     
WHERE status = "A"                                { $inc: { age: 3 } }, 
                                                  { multi: true }       
                                               )                        

七、记录删除对照

SQL语句                                        mongoDB java script shell
---------------------------------------        --------------------------------------------------
DELETE FROM users                              db.users.remove( { status: "D" } )
WHERE status = "D"

---------------------------------------        --------------------------------------------------
DELETE FROM users                              db.users.remove({}) 

八、mongoDB与MySQL的其他命令对照

功能描述          MySQL工具或方法                              mongoDB工具或方法
-------------     ----------------                            ---------------------------------
逻辑备份工具       mysqldump                                     mongodump                        
逻辑还原工具       mysql                                         mongorestore                     
数据导出工具       mysqldump                                     mongoexport                      
数据导入工具       source                                        mongoimport                      
新建用户并授权    grant all on *.* to username@'localhost'      db.addUser("user","psw")         
                   identified by 'passwd';                       db.auth("user","psw")            
显示库列表          show databases;                               show dbs                         
建库               create database dbname;                       use dbname                       
切换库            use dbname;                                   use dbname                       
显示表列表          show tables;                                  show collections or show tables  
查询主从状态       show slave status;                            rs.status                        

参考网址:https://docs.mongodb.com/manual/reference/sql-comparison/

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
6月前
|
SQL DataWorks NoSQL
DataWorks产品使用合集之如何将SQL Server中的数据转存到MongoDB
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
283 1
|
7月前
|
JSON NoSQL MongoDB
实时计算 Flink版产品使用合集之要将收集到的 MongoDB 数据映射成 JSON 对象而非按字段分割,该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
98 3
|
5月前
|
SQL NoSQL API
MongoDB 增删改查 常用sql总结
MongoDB 增删改查 常用sql总结
202 1
|
4月前
|
SQL JSON 关系型数据库
"SQL老司机大揭秘:如何在数据库中玩转数组、映射与JSON,解锁数据处理的无限可能,一场数据与技术的激情碰撞!"
【8月更文挑战第21天】SQL作为数据库语言,其能力不断进化,尤其是在处理复杂数据类型如数组、映射及JSON方面。例如,PostgreSQL自8.2版起支持数组类型,并提供`unnest()`和`array_agg()`等函数用于数组的操作。对于映射类型,虽然SQL标准未直接支持,但通过JSON数据类型间接实现了键值对的存储与查询。如在PostgreSQL中创建含JSONB类型的表,并使用`-&gt;&gt;`提取特定字段或`@&gt;`进行复杂条件筛选。掌握这些技巧对于高效管理现代数据至关重要,并预示着SQL在未来数据处理领域将持续扮演核心角色。
63 0
|
4月前
|
NoSQL MongoDB Windows
MongoDB 副本模式,会映射到本地 127.0.0.1 错误
MongoDB 副本模式,会映射到本地 127.0.0.1 错误
100 0
|
6月前
|
SQL XML 数据库
后端数据库开发高级之通过在xml文件中映射实现动态SQL
后端数据库开发高级之通过在xml文件中映射实现动态SQL
57 3
|
6月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
76 3
|
7月前
|
SQL 资源调度 NoSQL
实时计算 Flink版产品使用合集之使用Flink CDC SQL MongoDB Connector时,可以采取什么措施来提升数据消费速率
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
106 0