初識MongoDB記錄

官方解釋: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})
意思是 先升序排列 然後再根據某個字段 在排列
			

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章