【原】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 ...
随机推荐
- 李洪强iOS开发之【Objective-C】08-self关键字
一.Java中的this只能用在动态方法中,不能用在静态方法中 1.在动态方法中使用this关键字 1 public class Student { 2 private int age; 3 publ ...
- lintcode :continuous subarray sum 连续子数组之和
题目 连续子数组求和 给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.(如果两个相同的答案,请返回其中任意一个) 样例 给定 [-3, ...
- lintcode 中等题:Singleton number II 落单的数 II
题目 落单的数 II 给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字. 样例 给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4 挑战 一次遍历,常数级 ...
- Linux中断(interrupt)子系统
Linux中断(interrupt)子系统之一:中断系统基本原理 Linux中断(interrupt)子系统之二:arch相关的硬件封装层 Linux中断(interrupt)子系统之三:中断流控处理 ...
- s3cmd的安装与使用
s3cmd 是一款 Amazon S3 命令行工具.它不仅能上传.下载.同步,还能设置权限,下面是完整的安装使用指南. 主要是还是用来储存日志文件或者其他什么资料. https://wangyan. ...
- Android Andbase应用开发框架
[运行说明]运行AndbaseDemo需要将文件中的Andbase库Add进demo中.1.andbase中包含了大量的开发常用手段.如网络下载,多线程与线程池的管理,数据库ORM,图片缓存管理,图片 ...
- JUnit4概述
JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写. 先简单解释一下什么是Annotation,这个单词一般是翻译成元数据.元数据 ...
- [LeetCode#249] Group Shifted Strings
Problem: Given a string, we can "shift" each of its letter to its successive letter, for e ...
- Python模块整理(三):子进程模块subprocess
文章 原始出处 http://ipseek.blog.51cto.com/1041109/807513. 本来收集整理网络上相关资料后整理: 从python2.4版本开始,可以用subprocess这 ...
- 给你的JAVA程序配置参数(Properties的使用)
我们在写JAVA程序时,很多时候运行程序的参数是需要动态改变的 测试时一系列参数,运行时一系列参数 又或者数据库地址也需要配一套参数,以方便今后的动态部署 这些变量的初始化,我们在写小DEMO时完全可 ...