SQL與MongoDB的詳細對比
為了更好的理解MongoDB與傳統關聯式資料庫的區別,我們將幾款典型的關聯式資料庫與MongoDB進行對比,如下圖所示:
可執行檔案對比
MySQL |
Oracle |
MongoDB |
mysqld |
oracle |
mongod |
mysql |
sqlplus |
mongo |
術語對比
MySQL |
MongoDB |
database |
database |
table |
collection |
index |
index |
row |
BSON document |
column |
BSON field |
join |
Embedding and linking |
primary key |
_id field |
group by |
aggregation |
MongoDB查詢被表示成JSON(或BSON)物件,在MongoDB中查詢語句(以及其他東西,比如索引健模式)被表示成JSON(BSON),然而實際動作(比如"find")是在某種常用程式語言中實現的。下圖對比了在SQL和MongoDB中的查詢語句:
SQL語句 |
MongoDB語句 |
create table users (a number,b number) |
Implicit; can also be done explicitly with db.createCollection("users") |
Insert into users values(1,2) |
db.users.insert({a:1,b:2}) |
select a,b from users |
db.users.find({ },{a:1,b:1}) |
select * from users |
db.users.find() |
select * from users where age=30 |
db.users.find({age:30}) |
select a,b from users where age=30 |
db.users.find({age:30},{a:1,b:1}) |
Select * from users where age=30 order by name |
db.users.find({age:30}).sort() |
select * from users where age>30 |
db.users.find({age:{$gt:30}}) |
select * from users where age>=30 |
db.users.find({age:{$gte:30}}) |
select * from users where age<30 |
db.users.find({age:{$lt:30}}) |
select * from users where age<=30 |
db.users.find({age:{$lte:30}}) |
select * from users where age!=30 |
db.users.find({age:{$ne:30}}) |
select * from users where age> 18 and age <25 |
db.users.find({age:{$gt:18,$lt:25}}) |
select * from users where a=18 or b=25 |
db.users.find({$or :[{a:18} , {b:25} ] } ) |
select * from users where name like "%Joe%" |
db.users.find({name:/Joe/}) |
select * from users where name like "Joe%" |
db.users.find({name:/^Joe/}) |
select * from users order by name desc |
db.users.find().sort({name:-1}) 按降序排序 |
select * from users order by name |
db.users.find().sort({name:1}) 按升序排序 |
select * from users where a=2 and b='dsf' |
db.users.find({a:2,b:'dsf'}) |
select * from users limit 10 skip 15 |
db.users.find().limit(10).skip(15) |
select * from users limit 1 |
db.users.findOne() |
select order_id from orders o,order_line_items li where li.order_id=o.order_id and li.sku=123456 |
db.orders.find({"items.sku":123456},{_id:1}) |
select distinct first_name from users |
db.users.distinct("first_name") |
select count(*) from users |
db.users.count() |
select count(*) from users where age > 36 |
db.users.find({age:{'$gt':36}}).count() |
select count(age) from users |
db.users.find({age:{'$exists':true}}).count() |
create index indexname on users(name) |
db.users.ensureIndex({name:1}) |
create index indexname on users(name,add desc) |
db.users.ensureIndex({name:1,add:-1}) |
explain select * from users where b=3 |
db.users.find({b:3}).explain() |
update users set a=1 where b='dsf' |
db.users.update({b:'dsf'},{$set:{a:1}}) |
update users set a=a+2 where b='dsf' |
db.users.update({b:'dsf'},{$inc:{a:2}},false,true) |
delete from users where z="abc" |
db.users.remove({z:'abc'}) |
下面的例子表示的是JavaScript並且它們可以在mongo shell中執行,下面兩條修改資料庫文件的語句結果是相同的:
//檢視原先的資料庫內容
> db.chenfeng.find().forEach(printjson)
{ "_id" : ObjectId("56ad86df4486a08016f82bfa"), "a" : 1, "b" : 2 }
{ "_id" : ObjectId("56ad86f74486a08016f82bfb"), "x" : 3, "y" : 4 }
>
//將b的值改為5
> var thing=db.chenfeng.findOne({a:1})
> thing
{ "_id" : ObjectId("56ad86df4486a08016f82bfa"), "a" : 1, "b" : 2 }
> thing.b=5
5
> db.chenfeng.save(thing)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.chenfeng.find().forEach(printjson)
{ "_id" : ObjectId("56ad86df4486a08016f82bfa"), "a" : 1, "b" : 5 }
{ "_id" : ObjectId("56ad86f74486a08016f82bfb"), "x" : 3, "y" : 4 }
>
//將b的值改回成1
> db.chenfeng.update({a:1},{$set:{b:1}},false,true)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.chenfeng.find().forEach(printjson)
{ "_id" : ObjectId("56ad86df4486a08016f82bfa"), "a" : 1, "b" : 1 }
{ "_id" : ObjectId("56ad86f74486a08016f82bfb"), "x" : 3, "y" : 4 }
>
由這個例子可以看出,MongoDB為資料庫操作提供了大量靈活的方式。當然,在增加靈活性的同時,也增加了程式設計師記憶的難度。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-1984777/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- XXL-Job與Elastic-Job詳細對比AST
- MyISAM與InnoDB兩者的區別、詳細總結、效能對比
- 努比亞nubia Z11 Max與小米Max詳細對比評測
- Apache流計算框架詳細對比Apache框架
- MySQL的鍵值儲存以及與MongoDB的對比MySqlMongoDB
- Linux與windows對比有什麼優勢?詳細區別LinuxWindows
- MySQL與MongoDB設計例項對比QYMySqlMongoDB
- PG和MySQL詳細的一些特性對比MySql
- 手把手教你MongoDB的安裝與詳細使用(二)MongoDB
- nGrinder詳細介紹及效能工具對比
- Spark SQL中對Json支援的詳細介紹SparkSQLJSON
- Mongodb操作之查詢(循序漸進對比SQL語句)MongoDBSQL
- Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的詳細對比MavenGradle
- windows安裝mongodb詳細教程WindowsMongoDB
- MongoDB高階查詢詳細MongoDB
- 詳解Java鎖的升級與對比(1)——鎖的分類與細節(結合部分原始碼)Java原始碼
- 小米盒子3和增強版的區別?詳細對比
- IDC主機系統詳細對比評測
- iOS 三種錄製視訊方式詳細對比iOS
- MongoDB分片群集的部署(用心描述,詳細易懂)!!MongoDB
- 簡單對比MySQL和Oracle中的一個sql解析細節MySqlOracle
- MongoDB備份方式詳細介紹MongoDB
- 詳細解讀:不同RAID級別的優缺點對比AI
- 詳細對比C語言中的chmod()函式和fchmod()函式C語言函式
- 魅藍3S與魅藍note3詳細區別對比評測
- vivo Xplay5標準版與旗艦版詳細區別對比評測
- Spring Data MongoDB 操作 document DB 的詳細示例SpringMongoDB
- 電商系統評測:大商創和小京東的詳細對比
- CentOS 7 安裝MongoDB詳細步驟CentOSMongoDB
- Memcache,Redis,MongoDB(資料快取系統)方案對比與分析RedisMongoDB快取
- 一加3T與酷派cool1c詳細區別對比評測
- MongoDB啟動命令mongod引數的詳細解釋MongoDB
- (摘)sql-索引的作用(超詳細)SQL索引
- ORACLE SQL Loader的詳細語法OracleSQL
- MySQL和MongoDB設計例項對比MySqlMongoDB
- 【SQL】Oracle sql語句 minus函式執行效率與join對比SQLOracle函式
- PHP比較運算子的詳細學習PHP
- synchronized 與 Lock 的對比synchronized