官方解釋:MongDB是一個介於關係型數據庫和非關係型數據之間的產品, 是非關係型數據庫中功能最豐富,最像關係數據庫,語法類似js 是一個面向集合的,模式自由的文檔型數據庫
缺點:不支持聯表查詢 不支持sql語句 不支持事務存儲過程等 所以不適合存儲數據間關係比較複雜的數據 一般主要用於數據倉庫使用
適用於:日誌系統 股票數據等
不適用於:電子商務系統等需要連多表查詢的功能
因爲自己的項目正好需要存儲股票數據
所以需要準備學習 mongoDB 以下是自己兩天內學習的記錄! 只記錄會比較用到的知識,歡迎補充!
MongoDB可視化操作界面工具下載地址:
https://download.csdn.net/download/zhangzeshan/12236504
首先了解三個概念 文檔 集合 數據庫
1.文檔
文檔是mongodb數據的基本單元 類似於關係數據庫的行
多個鍵值以文檔的形式存取記錄
如: {"username":"zzs","age":10,"sex":男} {"Username":"zzs","age":"10"}
需要注意的是:MongoDB區分大小寫 第age是數字類型 sex是字符類型 每個文檔的大小不超過16M
2.集合
集合就是一組文檔 多個文檔組成一個集合 類似於mysql的表
無模式是指在同一個集合中可以包含不同格式的文檔: 不用創建 沒有結構 可以放不同的文檔
3.數據庫
多個集合可以組成數據庫 一個MongoDB實例可以承載多個數據庫 之間完全獨立 無需創建
一個數據庫有多個集合 一個集合有多個文檔
三者的關係理解成一句話:數據庫包含着集合,集合裏包含着文檔,數據庫和集合都不需要手動創建
因此:創建文檔時 如果文檔所在數據庫和集合不存在 會手動創建
安裝的mongodb的步驟 戳這裏 不在贅述
https://www.runoob.com/mongodb/mongodb-tutorial.html
基本命令:
查看現有數據庫
show dbs
進入某個數據庫(數據庫不存在就會創建)
use 庫名
如:use zhangzeshan
查看當前所處於哪個數據庫
db
查看當前數據庫有哪些集合
show collections
創建集合
db.createCollection("集合名")
如:db.createCollection("zhangzeshan")
刪除集合
db.集合名.drop()
如:db.zhangzeshan.drop()
刪除數據庫
db.dropDatabase()
增刪改查:
插入文檔:
當插入文檔時候 如果沒有給定_id屬性 則數據庫會自動增加 區分文檔的唯一
用法:db.集合的名字.insert(文檔內容)
如:往 stus集合 插入文檔 (插入單條)
db.stus.insert({name:"zzs",sex:"1"})
插入多條
db.stu.insert([
{"name":"孫悟空",sex:"男"},
{"name":"豬八戒",sex:"男"}
])
insertOne() 插入一個
insertMany() 插入多個
查詢文檔:
find 默認升序排列
find 默認升序排列
如:查看stus集合下的所有文檔
db.stus.find()
db.集合名字.find(單條件)
如:查看stus集合下的 _id的值爲zzs的文檔
db.stu.find({_id:"zzs"})
或
db.stu.find({"_id":"zzs"})
db.集合名字.find(多條件)
如:查看集合下的 name爲zzs sex爲1的文檔
db.stu.find({name:"zzs",sex:"1"})
db.集合的名字.findOne(條件) 只獲取一條
db.stu.findOne(條件)
如:db.stu.findOne({name:"zzs",sex:"1"})
要獲取裏面的key信息 如獲取 name
db.stu.findOne({name:"zzs",sex:"1"}).name
獲取符合條件的總數
db.集合的名字.find(條件).count()
db.stu.find({"name":"zzs","sex":"1"}).count()
篩選字段進行查詢 1升序 -1 倒序 _id爲0 不顯示id
db.集合名字.find({},{字段:1,_id:0})
如:db.users.find({},{hobby:1,_id:0})
修改文檔: update默認只改一個
db.集合名.update(查詢條件,新對象)--- 後者覆蓋前者
如更新集合中name=zzs的條數的 替換成 整條只有 age值爲100
db.stu.update({name="zzs"},{age:100})
db.集合.replaceOne(舊的數據,新的數據) 替換
db.stu.replaceOne({name:"zzs"},{name:"zhangzeshan"})
db.集合名.update(查詢條件,$set針對屬性修改 有就改 無就加)
如更新集合中id爲多少的那條文檔的
db.stu.update(
{_id:ObjectId("5e621b58c9047e5d88f90ec8")},
{$set:{name:"zzs","sex":1}}
)
db.集合名.update(查詢條件,$unset 將屬性去掉)
db.stu.update(
{"_id":ObjectId("5e621b58c9047e5d88f90ec8")},
{$unset:{age:"100"}}
)
如果update 要進行修改多個 需要傳遞第三個參數 {multi:true}
db.stu.update({"name":"zzs"},{$set:{age:"26"}},{multi:true})
db.集合名.updateMany(查詢條件,$set針對屬性修改 有就改 無就加)
db.stu.updateMany()
如:db.stu.updateMany({"name":"zzs"},{$set:{age:"25"}})
刪除文檔:
db.集合.remove()
默認刪除多個類似於deleteMany 也可以刪除一個
db.stu.remove({_id:ObjectId("5e621b67c9047e5d88f90ec9")})
如果remove只要刪除一個 那就多傳一個參數 true
db.stu.remove({"name":"孫悟空"},true)
刪除所有文檔(整個集合)
db.stu.drop()
db.集合.deleteOne() 刪除單個
db.集合.deleteMany() 刪除多個
例子演示:
查詢文檔下的某個集合的屬性對應的文檔
db.users.find({"hobby.cities":"beijing"})
讓某個文檔的屬性下的數組的增加屬性
push方法 不關屬性存在 也會插入
addToSet 存在就不插入
db.users.update({條件},{$push:{"屬性.數組":"值"}})
db.users.update({"user_name":"tangseng"},{$addToset:{"hobby.movies":"newMovie"}})
刪除條件是屬性值下面的beijing的文檔
db.users.remove({"hobby.cities":"beijing"})
查詢集合下 num>500的數據
db.numbers.find({num:{$gt:500}})
查詢集合下 num>40 並且<50的數據
db.numbers.find({num:{$gt:40,$lt:50}})
查詢集合下 前十條數據
db.numbers.find().limit(10)
查詢集合下 前11條到20條的數據
skip(頁碼-1*每頁條數).limit(每頁條數)
db.numbers.find().skip(10).limit(10)
查詢集合下 前21到30的數據
db.numbers.find().skip(20).limit(10)
查詢集合下的數據 按照條件進行排序
1升序 -1 倒序
如:按照 sal字段升序排序
db.users.find().sort({sal:1})
或
db.users.find().sort({sal:1,字段:1})
意思是 先升序排列 然後再根據某個字段 在排列