天天看點

【MongoDb入門】15分鐘讓你敢說自己會用MongoDB了

一.MongDB是什麼呢,我該如何下手呢?

MongoDB是一個基于分布式檔案存儲的資料庫。由C++語言編寫。旨在為WEB應用提供可擴充的高性能資料存儲解決方案。

如果小夥伴你的機器上還沒有安裝MongoDb的話請快快去安裝吧,下載下傳位址:https://www.mongodb.com/download-center#community,如果下載下傳慢的話,我也是沒有辦法了呢。

我使用的可視化界面是Robo,<>https://robomongo.org/download,這個下載下傳還是比較快的,安裝也是非常簡單,直接next一路到底,最後設定一個連接配接配置。

如果你已經安裝成功了,請快快和我學習MongDB的指令吧。

【MongoDb入門】15分鐘讓你敢說自己會用MongoDB了

二.正文

大家不要認為MongoDb和平時的資料庫不同,其關系如下表

SQL術語 MongoDB 解釋
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" : "zara",

"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中先多插個資料(實際上偷偷的插了幾條):

【MongoDb入門】15分鐘讓你敢說自己會用MongoDB了

接着我們通過update去更新下這個title吧。

db.zara.update({'title':'zara說MongoDb'},{$set:{'title':'該吃了呢'}})
      

  

【MongoDb入門】15分鐘讓你敢說自己會用MongoDB了

為什麼隻更新第一個符合的呢,這個時候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()      

三.寫到最後(不是大牛就不可以寫部落格了嗎?)

你不是大牛就更應該寫部落格,無論你是開發還是運維測試,都是搞技術的,技術發展的很快,難道學完就丢了,過明天在拾起來?你不像那些大牛看看官方文檔在自己動動手就可以懂原理的人,你就更沒有理由不寫部落格了。