天天看點

MongoDB資料庫的安裝及用法

MongoDB

windows下 下載下傳MongoDB

www.mongodb.org/downloads

https://mongoose.kkfor.com/ 中文文檔

MongoDB資料庫的安裝及用法
MongoDB資料庫的安裝及用法

shell(計算機殼層)

在計算機科學中,Shell俗稱殼(用來差別于核),是指“提供使用者使用界面”的軟體(指令解析器)。它類似于DOS下的command.com和後來的cmd.exe。它接收使用者指令,然後調用相應的應用程式。

在Mac系統上安裝

一、安裝

在Mac OS上面安裝MongoDB,你可以通過編譯源代碼來安裝 ,也可以在Mac OS上使用Homebrew安裝。 使用Homebrew安裝MongoDB:

brew update brew install mongodb
           

二、啟動MongoDB

mongod --config /usr/local/etc/mongod.conf
           

三、MongoDB指令行管理 shell

mongo
           

四、MongoDB是什麼

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

它的特點:高性能、易部署、易使用,存儲資料非常友善。

五、MongoDB術語/概念

MongoDB資料庫的安裝及用法

mySQL和 MongoDB 存儲資料對比。MongoDB屬于noSQL資料庫(有興趣的同學可以自行查閱不同種類的資料庫的差別)。

【注】MongoDB存儲方式類似json格式的字元串。

MongoDB資料庫的安裝及用法

六、介紹 MongoDB 資料庫

  1. 一個mongodb中可以建立多個資料庫。
  2. MongoDB的預設資料庫為"db",該資料庫存儲在data目錄中。
  3. MongoDB的單個執行個體可以容納多個獨立的資料庫,每一個都有自己的集合和權限,不同的資料庫也放置在不同的檔案中。

七、MongoDB 集合

  1. 集合就是 MongoDB 文檔組,類似于 RDBMS (關系資料庫管理系統:Relational Database Management System)中的表格。
  2. 集合存在于資料庫中,集合沒有固定的結構,這意味着你在對集合可以插入不同格式和類型的資料,但通常情況下我們插入集合的資料都會有一定的關聯性。

八、MongoDB 文檔

  1. 文檔是一個鍵值(key-value)對(即BSON)。MongoDB 的文檔不需要設定相同的字段,并且相同的字段不需要相同的資料類型,這與關系型資料庫有很大的差別,也是 MongoDB 非常突出的特點。
  2. 一個簡單的文檔例子如下: {"genres": ["犯罪","劇情" ],"title": "肖申克的救贖"}

九、MongoDB 資料類型

MongoDB資料庫的安裝及用法

十、資料庫常用指令

(1)Help檢視指令提示

help db.help() db.test.help() db.test.find().help()
           

(2)建立/切換資料庫,如果不存在會建立,如果存在會切換到這個資料庫。

建立資料庫并不會真的存在,隻有在其中插入資料,才會建立資料庫成功。

use music
           

(3)插入資料

db.albums.insertOne({"title": "再見理想"})
           

(4)查詢資料庫

show dbs
           

(5)檢視目前使用的資料庫

db/db.getName()
           

(6)顯示目前DB狀态

db.stats()
           

(7)檢視目前DB版本

db.version()
           

(8)檢視目前DB的連結機器位址

db.getMongo()
           

(9)删除資料庫

db.dropDatabase()
           

十一、Collection集合操作

(1)建立一個集合

db.createCollection(name, options) // 因為 MongodbDB 在第一次引用時會隐式地建立這個 collection。這個方法主要是使用指定的 options 建立一個新的 collection。 
// 例如,你使用 db.createCollection() 建立一個 capped collection 或者建立一個新的集合 document validation 。

db.createCollection("log", { capped : true, size : 5242880, max : 5000 } ) //這個指令建立名字為“log”,最大存儲空間為 5m,最多 5000 個文檔的集合 db.log.isCapped(); //判斷集合是否為定容量
           

(2)得到指定名稱的集合

db.getCollection("account");
           

(3)得到目前db的所有集合

db.getCollectionNames();
           

(4)顯示目前db所有集合的狀态

db.printCollectionStats();
           

十二、添加、修改與删除集合資料

(1)添加

db.albums.insertOne({title:"再見理想"}) //插入一條記錄 
db.albums.insertMany([{title:"舊日足迹"},{title:"尋夢環遊記"}]) //插入多條記錄 
db.albums.insert([{title:"光輝歲月"},{title:"陽光燦爛的日子"}]) //當然也可以直接通過insert插入資料

//當然也可以通過save插入資料 
db.users.save({name: 'zhangsan', age: 25, sex: true});
           

(2)修改

db.albums.updateMany({},{$set:{artist: "Beyond"}}) 
db.albums.updateOne({title:"尋夢環遊記"},{$set:{artist: "王力宏"}}) 
db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
           

相當于:update users set name = ' changeName' where age = 25;

【注】其中第一個布爾值,代表如果沒有找到該條件,是否插入一條資料。為true插入。

【注】第二個布爾值,代表是否要更新全部符合條件的資料,如果為true,更新所有符合條件的資料,為false隻更新第一條找到的資料。

db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
           

相當于:update users set age = age + 50 where name = 'Lisi';

db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
           

相當于:update users set age = age + 50, name = 'hoho' where name = 'Lisi';

(3)删除 deleteOne(删除一條) deleteMany(删除多條) remove

第一個布爾值:代表是否删除一條記錄,如果為true,隻删除找到的第一條記錄,預設是false

db.users.remove({age: 132},true); db.albums.remove({}) //删除所有
           

十三、集合資料查詢(一)

(1)查詢所有記錄

db.userInfo.find(); 相當于:select* from userInfo;
           

(2)查詢去重後資料

db.userInfo.distinct("name"); 相當于:select distict name from userInfo;
           

(3)查詢age = 22的記錄

db.userInfo.find({"age": 22}); 相當于: select * from userInfo where age = 22;
           

(4)查詢age > 22的記錄

db.userInfo.find({age: {$gt: 22}}); 相當于:select * from userInfo where age > 22;
           

(5)查詢age < 22的記錄

db.userInfo.find({age: {$lt: 22}}); 相當于:select * from userInfo where age < 22;
           

(6)查詢age >= 25的記錄

db.userInfo.find({age: {$gte: 25}}); 相當于:select * from userInfo where age >= 25;
           

(7)查詢age <= 25的記錄

db.userInfo.find({age: {$lte: 25}});
           

(8)查詢age >= 23 并且 age <= 26

db.userInfo.find({age: {$gte: 23, $lte: 26}});
           

(9)查詢name中包含 mongo的資料

db.userInfo.find({name: /mongo/}); //相當于%% select * from userInfo where name like '%mongo%';
           

(10)查詢name中以mongo開頭的

db.userInfo.find({name: /^mongo/}); 相當于: select * from userInfo where name like 'mongo%';
           

集合資料查詢(二)

(11)查詢指定列name、age資料

【注】如果想顯示資料就将後面的數字寫成1,不想顯示就将後面的數字寫成0

db.userInfo.find({}, {name: 1, age: 1}); 相當于:select name, age from userInfo;
           

(12)查詢指定列name、age資料, age > 25

db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1}); 相當于:select name, age from userInfo where age >25;
           

(13)按照年齡排序

升序:

db.userInfo.find().sort({age: 1});
           

降序:

db.userInfo.find().sort({age: -1});
           

(14)查詢name = zhangsan, age = 22的資料

db.userInfo.find({name: 'zhangsan', age: 22});
           

相當于:select * from userInfo where name = 'zhangsan' and age = ’22';

(15)查詢前5條資料

db.userInfo.find().limit(5);
           

相當于:select top 5 * from userInfo;

集合資料查詢(三)

(16)查詢10條以後的資料

db.userInfo.find().skip(10);
           

相當于:select * from userInfo where id not in (select top 10 * from userInfo);

(17)查詢在5-10之間的資料

db.userInfo.find().limit(10).skip(5);
           

(18)or與 查詢

db.userInfo.find({$or: [{age: 22}, {age: 25}]});
           

相當于:select * from userInfo where age = 22 or age = 25;

(19)查詢第一條資料

db.userInfo.findOne();
           

相當于:select top 1 * from userInfo;db.userInfo.find().limit(1);

(20)查詢某個結果集的記錄條數

db.userInfo.find({age: {$gte: 25}}).count();
           

相當于:select count(*) from userInfo where age >= 20;

最後我們可以通過一個執行個體來練習一下

擷取資料 https://api.douban.com/v2/movie/top250

db.movies.find({year:"1994"},{title:1,year:1,_id:0}) //顯示評分 
db.movies.find({},{title:1,year:1,"rating.average":1,_id:0}) //傳回目前記錄的條數 
db.movies.find({},{title:1,year:1,"rating.average":1,_id:0}).size() //設定隻顯示10條資料 
db.movies.find({},{title:1,year:1,"rating.average":1,_id:0}).limit(10) //跳過十條以後的資料 
db.movies.find({},{title:1,year:1,"rating.average":1,_id:0}).skip(10) //跳過兩條資料顯示三條 
db.movies.find({},{title:1,year:1,"rating.average":1,_id:0}).skip(2).limit(3) //按照評分的升序進行排序 
db.movies.find({},{title:1,year:1,"rating.average":1,_id:0}).sort({"rating.average":1}) //按照評分的降序進行排序 
db.movies.find({},{title:1,year:1,"rating.average":1,_id:0}).sort({"rating.average":-1}) //設定查找評分大于9.6的電影 
db.movies.find({"rating.average":{$gt:9.5}},{title:1,"ration.average":1,_id:0}) //查詢犯罪類型的電影 
db.movies.find({genres:{$in:["犯罪"]}}, {title:1,genres:1,_id:0}) //查詢犯罪和劇情類型的電影 
db.movies.find({genres:{$in:["犯罪","劇情"]}}, {title:1,genres:1,_id:0}) //查詢不包含犯罪和劇情類型的電影 
db.movies.find({genres:{$nin:["犯罪","劇情"]}}, {title:1,genres:1,_id:0})
           

這就是我們功能強大的MongoDB