MongoDB初探第二篇
與sql語句的簡單對比
在第一篇中分享了一些MongoDB的基本知識點,因為安裝執行其實都還是很輕巧的,所以對於大家上手來說應該問題不大,但是安裝完成,資料庫也可以連線了,但是MongoDB中是沒有辦法執行sql語句的。這個時候關係型資料庫中的一些思維直接移植過來就不適用了,但是大道至簡,其實道理還是相同的,對於的資料的操作可以透過api來完成,這個從某種程度上來說,是MongoDB的亮點也是另外一種優勢。
我簡單的總結了一下常用的sql語句的一些用法在MongoDB中改怎麼使用。
首先一個很大的不同是,在MongoDB中,沒有表的概念,都是以collection為基本的單位儲存的。可以透過show collections來檢視當前的資料庫中存在的collections
> show collections
startup_log
system.indexes
system.profile
我們來看看增刪改查的用法。
insert
原本sql語句中的類似下面的語句
insert into test values(100,'test1');
在MongoDB中可以使用如下的方式來實現,我們多插入一些資料。
db.test.insert({id:11,name:"test1"});
db.test.insert({id:12,name:"test2"});
db.test.insert({id:13,name:"test3"});
db.test.insert({id:14,name:"test4"});
db.test.insert({id:15,name:"test5"});
db.test.insert({id:16,name:"test6"});
檢視一下資料的情況。
> db.test.find();
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 13, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
這個時候檢視collections會發現,已經建立好了這個collection
> show collections
startup_log
system.indexes
system.profile
test
還有一種插入方式,如果注意到上面的資料話,會發現有一個隱含列_id,如果需要手動指定_id列的值,可以使用save方法。
> db.test.save({_id:100001,id:11,name:"test_new"})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 100001 })
檢視新插入的資料,注意_id的值
> db.test.find();
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 13, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
{ "_id" : 100001, "id" : 11, "name" : "test_new" }
delete
如果需要刪除_id為100001的列的話,可以使用如下的方法
> db.test.remove({_id:100001})
WriteResult({ "nRemoved" : 1 })
> db.test.find();
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 13, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
update
我們嘗試修改name列為test3的資料,修改id為18
> db.test.update({name:"test3"},{$set:{id:18}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find();
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
or的使用方法
在sql where字句中,經常會有or這樣的過濾條件
我們來簡單模擬一下 name為test或者name為test2的資料
> db.test.find({"$or":[{name:"test1"},{name:"test2"}]})
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
and的使用方法
我們來模擬一下name為test1並且name為test2這樣的資料,這樣的資料應該不存在,以下是一個錯誤的例子。
> db.test.find({name:"test1"},{name:"test2"})
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "name" : "test1" }
正確的用法應該這麼寫。
模擬name為test1並且id為11的資料
> db.test.find({"$and":[{name:"test1"},{id:11}]})
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
rownum
> db.test.find().limit(2);
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
count
> db.test.count();
6
order by
注意排序的情況
> db.test.find().sort({name:-1})
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
> db.test.find().sort({name:1})
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
in 的使用
得到name在test1,test2,test3的資料
> db.test.find({'name' : {'$in' : ["test1", "test2", "test3"]}});
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" }
>
not in的使用
> db.test.find({'name' : {'$nin' : ["test1", "test2", "test3"]}});
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
大於等於。。的使用
id大於14的資料
> db.test.find({id: {$gte: 14}});
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
like的使用
> db.test.find({name:/5/});
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
distinct
distinct的使用,不過和sql中還是存在一定的差距,有點mapreduce的味道。
> db.test.distinct('name');
[ "test1", "test2", "test3", "test4", "test5", "test6" ]
在第一篇中分享了一些MongoDB的基本知識點,因為安裝執行其實都還是很輕巧的,所以對於大家上手來說應該問題不大,但是安裝完成,資料庫也可以連線了,但是MongoDB中是沒有辦法執行sql語句的。這個時候關係型資料庫中的一些思維直接移植過來就不適用了,但是大道至簡,其實道理還是相同的,對於的資料的操作可以透過api來完成,這個從某種程度上來說,是MongoDB的亮點也是另外一種優勢。
我簡單的總結了一下常用的sql語句的一些用法在MongoDB中改怎麼使用。
首先一個很大的不同是,在MongoDB中,沒有表的概念,都是以collection為基本的單位儲存的。可以透過show collections來檢視當前的資料庫中存在的collections
> show collections
startup_log
system.indexes
system.profile
我們來看看增刪改查的用法。
insert
原本sql語句中的類似下面的語句
insert into test values(100,'test1');
在MongoDB中可以使用如下的方式來實現,我們多插入一些資料。
db.test.insert({id:11,name:"test1"});
db.test.insert({id:12,name:"test2"});
db.test.insert({id:13,name:"test3"});
db.test.insert({id:14,name:"test4"});
db.test.insert({id:15,name:"test5"});
db.test.insert({id:16,name:"test6"});
檢視一下資料的情況。
> db.test.find();
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 13, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
這個時候檢視collections會發現,已經建立好了這個collection
> show collections
startup_log
system.indexes
system.profile
test
還有一種插入方式,如果注意到上面的資料話,會發現有一個隱含列_id,如果需要手動指定_id列的值,可以使用save方法。
> db.test.save({_id:100001,id:11,name:"test_new"})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 100001 })
檢視新插入的資料,注意_id的值
> db.test.find();
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 13, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
{ "_id" : 100001, "id" : 11, "name" : "test_new" }
delete
如果需要刪除_id為100001的列的話,可以使用如下的方法
> db.test.remove({_id:100001})
WriteResult({ "nRemoved" : 1 })
> db.test.find();
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 13, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
update
我們嘗試修改name列為test3的資料,修改id為18
> db.test.update({name:"test3"},{$set:{id:18}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find();
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
or的使用方法
在sql where字句中,經常會有or這樣的過濾條件
我們來簡單模擬一下 name為test或者name為test2的資料
> db.test.find({"$or":[{name:"test1"},{name:"test2"}]})
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
and的使用方法
我們來模擬一下name為test1並且name為test2這樣的資料,這樣的資料應該不存在,以下是一個錯誤的例子。
> db.test.find({name:"test1"},{name:"test2"})
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "name" : "test1" }
正確的用法應該這麼寫。
模擬name為test1並且id為11的資料
> db.test.find({"$and":[{name:"test1"},{id:11}]})
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
rownum
> db.test.find().limit(2);
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
count
> db.test.count();
6
order by
注意排序的情況
> db.test.find().sort({name:-1})
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
> db.test.find().sort({name:1})
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
in 的使用
得到name在test1,test2,test3的資料
> db.test.find({'name' : {'$in' : ["test1", "test2", "test3"]}});
{ "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" }
{ "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" }
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" }
>
not in的使用
> db.test.find({'name' : {'$nin' : ["test1", "test2", "test3"]}});
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
大於等於。。的使用
id大於14的資料
> db.test.find({id: {$gte: 14}});
{ "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" }
{ "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" }
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
{ "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
like的使用
> db.test.find({name:/5/});
{ "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" }
distinct
distinct的使用,不過和sql中還是存在一定的差距,有點mapreduce的味道。
> db.test.distinct('name');
[ "test1", "test2", "test3", "test4", "test5", "test6" ]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26845409/viewspace-1469875/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB初探MongoDB
- MongoDB 初探MongoDB
- MongoDB使用初探MongoDB
- mongoDB初探第一篇MongoDB
- SQL Profile(第二篇)SQL
- Deno 初探
- ELK初探
- Nginx 初探Nginx
- Mobx 初探
- jQuery初探jQuery
- 初探IndexedDBIndex
- 初探PWA
- Puppeteer 初探
- Redis初探Redis
- 初探Firewalld
- Serverless初探Server
- Promise初探Promise
- Quantum 初探
- 初探TCPTCP
- ## RATreeView 初探View
- puppeteer初探
- Quartz初探quartz
- MapDB初探
- Vue初探Vue
- Docker初探Docker
- angr初探
- Gitee初探Gitee
- 初探canvasCanvas
- pointerEvent 初探
- websoctet初探Web
- RxJava 初探RxJava
- GoLang初探Golang
- Django初探Django
- orm初探ORM
- 初探 TypeScriptTypeScript
- ECharts 初探Echarts
- 初探websocketWeb
- zookeeper初探