【原】Mongodb相关资料
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({}) |
学习资料
网址:
Mongodb官方文档感觉写的真心不错,推荐!
【原】Mongodb相关资料的更多相关文章
- MongoDB相关资料
MongoDB的介绍及安装参考http://www.cnblogs.com/lipan/archive/2011/03/08/1966463.html 安装过程: 第一步:下载安装包:官方下载地址←单 ...
- MongoDB相关资料收集
MongoDB 入门教程http://www.runoob.com/mongodb/mongodb-tutorial.html .net 驱动程序下载:http://mongodb.github.io ...
- AssetBundle机制相关资料收集
原地址:http://www.cnblogs.com/realtimepixels/p/3652075.html AssetBundle机制相关资料收集 最近网友通过网站搜索Unity3D在手机及其他 ...
- Mongodb相关 (Shell命令 / mongoose)
Mongodb相关 1.创建一个文件夹作为数据库存放的目录 2.打开cmd cd到Mongodb/bin目录去 3.执行mongod --dbpath "第一项创建的文件夹(数据库数据存放目 ...
- 全文检索解决方案(lucene工具类以及sphinx相关资料)
介绍两种全文检索的技术. 1. lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...
- React Test相关资料
karma 前端测试驱动器,生产测试报告,多个浏览器 mocha js的测试框架,相当于junit chai,单元测试的断言库,提供expect shudl assert enzyme sinon.j ...
- iOS10以及xCode8相关资料收集
兼容iOS 10 资料整理笔记 源文:http://www.jianshu.com/p/0cc7aad638d9 1.Notification(通知) 自从Notification被引入之后,苹果就不 ...
- Nao 类人机器人 相关资料
Nao 类人机器人 相关资料: 1.兄妹 PEPPER :在山东烟台生产,http://www.robot-china.com/news/201510/30/26564.html 2.国内机器人领先公 ...
- GBrowse配置相关资料
GBrowse配置相关资料(形状.颜色.配置.gff3) http://gmod.org/wiki/Glyphs_and_Glyph_Optionshttp://gmod.org/wiki/GBrow ...
随机推荐
- c/c++优秀博文
C进阶指南(1):整型溢出和类型提升.内存申请和管理 http://blog.jobbole.com/72830/ 软件开发中应避免的10个问题
- 用 React 编写SVG图表
1.代码 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="U ...
- 致诸位新程序员:来自Chuck Jazdzewski慈父般的忠告
记住这几句话,学无止境.(Never stop learning.)沟通至关重要.(Communication is critical.)履行承诺,胜过交付.(Under promise, over ...
- Go推出的主要目的之一就是G内部大东西太多了,系统级开发巨型项目非常痛苦,Go定位取代C++,Go以简单取胜(KISS)
以前为了做compiler,研读+实现了几乎所有种类的语言.现在看语法手册几乎很快就可以理解整个语言的内容.后来我对比了一下go和rust,发现go的类型系统简直就是拼凑的.这会导致跟C语言一样,需要 ...
- 243. Shortest Word Distance
题目: Given a list of words and two words word1 and word2, return the shortest distance between these ...
- HDU5087——Revenge of LIS II(BestCoder Round #16)
Revenge of LIS II Problem DescriptionIn computer science, the longest increasing subsequence problem ...
- 机器学习 —— 概率图模型(Homework: MCMC)
除了精确推理之外,我们还有非精确推理的手段来对概率图单个变量的分布进行求解.在很多情况下,概率图无法简化成团树,或者简化成团树后单个团中随机变量数目较多,会导致团树标定的效率低下.以图像分割为例,如果 ...
- PHP的线程安全与非线程安全版本的区别
Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍. ...
- Android真机调试的时候logcat中无法输出调试信息的解决办法
真机调试不输出日志到logcat的原因是手机厂商默认关闭了调试打印的功能,通过以下方法开启此方法. 下面以华为P6手机为例进行操作: 1.在拨号界面输入:*#*#2846579#*#* 进入测试菜单界 ...
- 1742. Team building(dfs)
1742 最小的是找联通块数 最大的找环 一个环算一个 其它的数各算一个 #include <iostream> #include<cstdio> #include<cs ...