MongoDB
windows下 下載下傳MongoDB
www.mongodb.org/downloads
https://mongoose.kkfor.com/ 中文文檔

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術語/概念
mySQL和 MongoDB 存儲資料對比。MongoDB屬于noSQL資料庫(有興趣的同學可以自行查閱不同種類的資料庫的差別)。
【注】MongoDB存儲方式類似json格式的字元串。
六、介紹 MongoDB 資料庫
- 一個mongodb中可以建立多個資料庫。
- MongoDB的預設資料庫為"db",該資料庫存儲在data目錄中。
- MongoDB的單個執行個體可以容納多個獨立的資料庫,每一個都有自己的集合和權限,不同的資料庫也放置在不同的檔案中。
七、MongoDB 集合
- 集合就是 MongoDB 文檔組,類似于 RDBMS (關系資料庫管理系統:Relational Database Management System)中的表格。
- 集合存在于資料庫中,集合沒有固定的結構,這意味着你在對集合可以插入不同格式和類型的資料,但通常情況下我們插入集合的資料都會有一定的關聯性。
八、MongoDB 文檔
- 文檔是一個鍵值(key-value)對(即BSON)。MongoDB 的文檔不需要設定相同的字段,并且相同的字段不需要相同的資料類型,這與關系型資料庫有很大的差別,也是 MongoDB 非常突出的特點。
- 一個簡單的文檔例子如下: {"genres": ["犯罪","劇情" ],"title": "肖申克的救贖"}
九、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