【MongoDb入門】15分鐘讓你敢說自己會用MongoDB了
一.MongDB是什麼呢,我該如何下手呢?
MongoDB是一個基於分散式檔案儲存的資料庫。由C++語言編寫。旨在為WEB應用提供可擴充套件的高效能資料儲存解決方案。
如果小夥伴你的機器上還沒有安裝MongoDb的話請快快去安裝吧,下載地址:https://www.mongodb.com/download-center#community,如果下載慢的話,我也是沒有辦法了呢。
我使用的視覺化介面是Robo,<>https://robomongo.org/download,這個下載還是比較快的,安裝也是非常簡單,直接next一路到底,最後設定一個連線配置。
如果你已經安裝成功了,請快快和我學習MongDB的命令吧。
二.正文
大家不要認為MongoDb和平時的資料庫不同,其關係如下表
SQL術語 | MongoDB | 解釋 |
---|---|---|
database | database | 資料庫 |
table | collection | 資料庫表/集合 |
row | document | 資料記錄行/文件 |
column | field | 資料欄位/域 |
對資料的操作如下
show collections #檢視資料庫中的表 show dbs #檢視該伺服器上所有的資料庫 show users #查詢 se admin #切換資料庫 db.help(); #顯示資料庫操作命令,裡面有很多的命令 db.foo.help(); 當前資料庫的幫助 db.foo.find(); #not where db.foo.find({a:1}) #條件是資料中有一個屬性叫a,且a的值為1
實際上這個foo,代表你當前的資料庫。
建立資料庫操作如下
use demo; #建立資料庫
db; #切換當前資料庫
show dbs #檢查資料庫
db.test.insert({"_id":"520","name","xiaoming"}) #建立表+資料
db.dropDatabase() #刪除資料庫
為什麼你在這裡可以不通過建立集合可以直接建立資料庫呢,那是因為MongoDb的機制是,讓你建立文件的時候,如果你沒有集合,那就直接給你建立集合了。
建立集合操作如下
db.creatCollection("ccname") #ccname同dbname一樣為自己剪的集合 db.creatCollection("ccname",{capped:true,autoIndexID:true,size:10000,max:10000})
其引數表如下:
欄位 | 型別 | 描述 |
---|---|---|
capped | 布林 | 固定集合的大小,如果值為true時必須也指定size |
autoindexid | 布林 | 如果為true,自動建立_id欄位索引 |
size | 數值 | 設定集合的大小 |
max | 數值 | 指定固定集合中包含文件的最大數量 |
刪除集合:
db.ccname.drop()
其中通過createCollection建立表返回{"ok":1.0}表示成功,刪除為true則成功;
文件的ADD:
db.zaraList.insert({'name':'zara','age':18})
db.zaraList.find()
或者你可以定義一個變數
abc = ({'name':'zara','age':18}) db.zaraList.insert(abc)
結果:
/* 1 */
{
"_id" : ObjectId("5bf8b297ac045dc7d0a20b2c"),
"name" : "李華",
"age" : 18.0
}
id自動給我們加密了,是不是非常的炫酷。
文件的Delete:
db.zaraList.remove({'name':'zara'})#刪除所有name=李華的文件 db.zaraList.remove({'name':'zara'},{justOne:1})#刪除一條name=李華的文件
聰明的小夥伴,現在絕對想到了,剛才我們插入的id是個加密的了,那我們怎麼刪除它呢?
db.zaraList.remove({"_id":ObjectId("5bf8b297ac045dc7d0a20b2c")})
一些方法:
db.collection.remove() | 刪除單個文件或與指定過濾器匹配的所有文件。 |
db.collection.deleteOne() | 即使多個文件可能與指定的過濾器匹配,也最多刪除與指定過濾器匹配的單個文件。3.2新版功能。 |
db.collection.deleteMany() | 刪除所有匹配指定過濾條件的文件。3.2新版功能。 |
需要注意的是remove() 方法已經過時了,現在官方推薦使用 deleteOne() 和 deleteMany() 方法。
如刪除集合下全部文件:
db.inventory.deleteMany({})
刪除 status 等於 A 的全部文件:
db.inventory.deleteMany({ status : "A" })
刪除 status 等於 D 的一個文件:
db.inventory.deleteOne( { status: "D" } )
為什麼不推薦呢,好像是因為一個釋放的東西,每次remove的時候都需要 db.repairDatabase() 來回收磁碟空間。
>db.repairDatabase() 或者 > db.runCommand({ repairDatabase: 1 })
文件的Update:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
引數說明:
- query : update的查詢條件,類似sql update查詢內where後面的。
- update : update的物件和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的
- upsert : 可選,這個引數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。
- multi : 可選,mongodb 預設是false,只更新找到的第一條記錄,如果這個引數為true,就把按條件查出來多條記錄全部更新。
- writeConcern :可選,丟擲異常的級別。
我們在ZaraList中先多插個數據(實際上偷偷的插了幾條):
接著我們通過update去更新下這個title吧。
db.zara.update({'title':'zara說MongoDb'},{$set:{'title':'該吃了呢'}})
為什麼只更新第一個符合的呢,這個時候multi 就派上用場了;則需要設定 multi 引數為 true。
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
如果你沒用視覺化視窗,那可能查出來的資料是一行一行的,你可以通過格式化進行整合美觀點。
db.zara.find().pretty()
文件的Select
語法:db.collection.find(query, projection)
引數解析:
- query :可選,使用查詢操作符指定查詢條件
- projection :可選,使用投影操作符指定返回的鍵。查詢時返回文件中所有鍵值, 只需省略該引數即可(預設省略)。
and寫法:
db.col.find({key1:value1, key2:value2}).pretty()
Or寫法:
db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()
and 和 or 聯合使用
db.col.find({"likes": {$gt:50}, $or: [{"by": "zara"},{"title": "MongoDB"}]}).pretty()
三.寫到最後(不是大牛就不可以寫部落格了嗎?)
你不是大牛就更應該寫部落格,無論你是開發還是運維測試,都是搞技術的,技術發展的很快,難道學完就丟了,過明天在拾起來?你不像那些大牛看看官方文件在自己動動手就可以懂原理的人,你就更沒有理由不寫部落格了。