Mongodb与关系型数据库对比

Mongodb与关系型数据库对比

由于之前主要接触的是关系型数据库,所以主要将Mongodb与关系型数据库进行对比:主要从术语、Server与Client、数据定义语言和操作语言四个方面进行比较。

1.术语

Mongodb与关系型数据库的术语对比如下图

关系型数据库术语 MongoDB 术语
database database
table collection
row document or BSON document
column field
index index
table joins embedded documents and linking
primary key Specify any unique column or column combination as primary key. primary key In MongoDB, the primary key is automatically set to the _id field.
aggregation (e.g. group by) aggregation pipeline See the SQL to Aggregation Mapping Chart.

2.数据库Server与Client对比

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

3.数据定义语言CREATE、ALTER、DROP比较

关系型数据库SQL语句 MongoDB语句
CREATE TABLE users ( id MEDIUMINT NOT NULL AUTO_INCREMENT,user_id Varchar(30),age Number,status char(1),PRIMARY KEY (id)) Implicitly created on first insert() operation. The primary key_id is automatically added if _id field is not specified. db.users.insert( { user_id: "abc123", age: 55, status: "A" } ) However, you can also explicitly create a collection: db.createCollection("users")
ALTER TABLE usersADD join_date DATETIME Collections do not describe or enforce the structure of its documents; i.e. there is no structural alteration at the collection level. However, at the document level, update() operations can add fields to existing documents using the $set operator. db.users.update( { }, { $set: { join_date: new Date() } }, { multi: true })
ALTER TABLE usersDROP COLUMN join_date Collections do not describe or enforce the structure of its documents; i.e. there is no structural alteration at the collection level. However, at the document level, update() operations can remove fields from documents using the $unset operator. db.users.update( { }, { $unset: { join_date: "" } }, { multi: true })
CREATE INDEX idx_user_id_ascON users(user_id) db.users.createIndex( { user_id: 1 } )
CREATE INDEX idx_user_id_asc_age_descON users(user_id, age DESC) db.users.createIndex( { user_id: 1, age: -1 } )
DROP TABLE users db.users.drop()

4.数据操作语言CURD比较

INSERT

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

SELECT

SQL SELECT 语句 MongoDB find 语句
SELECT *FROM users db.users.find()
SELECT id,user_id,statusFROM users db.users.find( { }, { user_id: 1, status: 1 })
SELECT user_id, status FROM users db.users.find( { }, { user_id: 1, status: 1, _id: 0 })
SELECT *FROM usersWHERE status = "A" db.users.find( { status: "A" })
SELECT user_id, statusFROM usersWHERE status = "A" db.users.find( { status: "A" }, { user_id: 1, status: 1, _id: 0 })
SELECT *FROM usersWHERE status != "A" db.users.find( { status: { $ne: "A" } })
SELECT *FROM usersWHERE status = "A"AND age = 50 db.users.find( { status: "A", age: 50 })
SELECT *FROM usersWHERE status = "A"OR age = 50 db.users.find( { $or: [ { status: "A" } , { age: 50 } ] })
SELECT *FROM usersWHERE age > 25 db.users.find( { age: { $gt: 25 } })
SELECT *FROM usersWHERE age < 25 db.users.find( { age: { $lt: 25 } })
SELECT *FROM usersWHERE age > 25AND age <= 50 db.users.find( { age: { $gt: 25, $lte: 50 } })
SELECT *FROM usersWHERE user_id like "%bc%" db.users.find( { user_id: /bc/ } )
SELECT *FROM usersWHERE user_id like "bc%" db.users.find( { user_id: /^bc/ } )
SELECT *FROM usersWHERE status = "A"ORDER BY user_id ASC db.users.find( { status: "A" } ).sort( { user_id: 1 } )
SELECT *FROM usersWHERE status = "A"ORDER BY user_id DESC db.users.find( { status: "A" } ).sort( { user_id: -1 } )
SELECT COUNT(*)FROM users db.users.count() or db.users.find().count()
SELECT COUNT(user_id)FROM users db.users.count( { user_id: { $exists: true } } ) or db.users.find( { user_id: { $exists: true } } ).count()
SELECT COUNT(*)FROM users WHERE age > 30 db.users.count( { age: { $gt: 30 } } ) or db.users.find( { age: { $gt: 30 } } ).count()
SELECT DISTINCT(status)FROM users db.users.distinct( "status" )
SELECT *FROM usersLIMIT 1 db.users.findOne() or db.users.find().limit(1)
SELECT *FROM usersLIMIT 5SKIP 10 db.users.find().limit(5).skip(10)
EXPLAIN SELECT *FROM usersWHERE status = "A" db.users.find( { status: "A" } ).explain()

UPDATE

SQL Updatey语句 MongoDB update语句
UPDATE usersSET status = "C"WHERE age > 25 db.users.update( { age: { $gt: 25 } }, { $set: { status: "C" } }, { multi: true })
UPDATE usersSET age = age + 3WHERE status = "A" db.users.update( { status: "A" } , { $inc: { age: 3 } }, { multi: true })

DELETE

SQL Delete 语句 MongoDB remove语句
DELETE FROM usersWHERE status = "D" db.users.remove( { status: "D" } )
DELETE FROM users db.users.remove({})

学习资料

网址:

  1. 官方Tutorial
  2. 官方 Document
  3. Tutorial
  4. Java操作Mongodb

Mongodb官方文档感觉写的真心不错,推荐!

【原】Mongodb相关资料的更多相关文章

  1. MongoDB相关资料

    MongoDB的介绍及安装参考http://www.cnblogs.com/lipan/archive/2011/03/08/1966463.html 安装过程: 第一步:下载安装包:官方下载地址←单 ...

  2. MongoDB相关资料收集

    MongoDB 入门教程http://www.runoob.com/mongodb/mongodb-tutorial.html .net 驱动程序下载:http://mongodb.github.io ...

  3. AssetBundle机制相关资料收集

    原地址:http://www.cnblogs.com/realtimepixels/p/3652075.html AssetBundle机制相关资料收集 最近网友通过网站搜索Unity3D在手机及其他 ...

  4. Mongodb相关 (Shell命令 / mongoose)

    Mongodb相关 1.创建一个文件夹作为数据库存放的目录 2.打开cmd cd到Mongodb/bin目录去 3.执行mongod --dbpath "第一项创建的文件夹(数据库数据存放目 ...

  5. 全文检索解决方案(lucene工具类以及sphinx相关资料)

    介绍两种全文检索的技术. 1.  lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...

  6. React Test相关资料

    karma 前端测试驱动器,生产测试报告,多个浏览器 mocha js的测试框架,相当于junit chai,单元测试的断言库,提供expect shudl assert enzyme sinon.j ...

  7. iOS10以及xCode8相关资料收集

    兼容iOS 10 资料整理笔记 源文:http://www.jianshu.com/p/0cc7aad638d9 1.Notification(通知) 自从Notification被引入之后,苹果就不 ...

  8. Nao 类人机器人 相关资料

    Nao 类人机器人 相关资料: 1.兄妹 PEPPER :在山东烟台生产,http://www.robot-china.com/news/201510/30/26564.html 2.国内机器人领先公 ...

  9. GBrowse配置相关资料

    GBrowse配置相关资料(形状.颜色.配置.gff3) http://gmod.org/wiki/Glyphs_and_Glyph_Optionshttp://gmod.org/wiki/GBrow ...

随机推荐

  1. lintcode:落单的数

    题目: 落单的数 给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字. 样例 给出 [1,2,2,1,3,4,3],返回 4 挑战 一次遍历,常数级的额外空间复杂度 ...

  2. 为什么需要用到序列化?为什么HttpSession中对象要序列化

    简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的 ...

  3. linux 防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...

  4. Java基础:三步学会Java Socket编程

    Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛        第一步 ...

  5. ASP.NET获取路径的方法

    原文:[转载]ASP.NET获取路径的方法 HttpContext.Current.Request.PhysicalPath;    // 获得当前页面的完整物理路径.比如 F:\XFU.NSQS\p ...

  6. Intellij IDEA 新建一个EJB工程(三)

    之前都是用IDEA启动JBoss服务器,并在启动的同时将EJB项目部署上去.在构建 artifacts 时遇到很多问题,明明是EJB项目却不能用EJB导出,真是奇怪~~ 后来用Web Applicat ...

  7. taglist

    http://blog.csdn.net/duguteng/article/details/7412652 这两天看到网上有将vim 改造成功能强大的IDE的blog,突然心血来潮,亲身经历了一下. ...

  8. 三个特殊资源目录 /res/xml /res/raw 和 /assets

    在android开发中,我们离不开资源文件的使用,从drawable到string,再到layout,这些资源都为我们的开发提供了极大的便利,不过我们平时大部分时间接触的资源目录一般都是下面这三个. ...

  9. TeeChart的X轴,使用伪装的时间

    TeeChart曲线的X轴是时间,但是频率很高.没法完全显示. 例如,一秒钟有2000个点,那么点与点的间隔为0.5毫秒. 使用TChart类的GetAxisLabel事件, 函数手册上对此事件的解释 ...

  10. 查看EBS中BI Publisher的版本

    查看EBS中BI Publisher的版本问题,Oracle提供了如下的几种方法: 从BI Publisher产生的报表文件查看 通过系统已打过的补丁(Patch)来决定,通过补丁号和BI Publi ...