柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫(kù) mongodb基本操作
柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫(kù) mongodb基本操作
1.數(shù)據(jù)庫(kù)操作
1.新建數(shù)據(jù)庫(kù)
use DATABASE NAME
use:用于切換/創(chuàng)建數(shù)據(jù)庫(kù),若不存在則創(chuàng)建,否則切換到指定數(shù)據(jù)庫(kù)。DATABASE_NAME:數(shù)據(jù)庫(kù)名稱。 執(zhí)行use articledb命令,創(chuàng)建數(shù)據(jù)庫(kù)articledb。
2.查看數(shù)據(jù)庫(kù)
?查看全部數(shù)據(jù)庫(kù)
show dbs 或者查看當(dāng)前數(shù)據(jù)庫(kù),需要先切換到指定數(shù)據(jù)庫(kù) db
3.刪除數(shù)據(jù)庫(kù)
db.dropDatabase()
db:表示當(dāng)前數(shù)據(jù)庫(kù)對(duì)象。 dropDatabase():用于刪除當(dāng)前數(shù)據(jù)庫(kù)的方法。 刪除當(dāng)前數(shù)據(jù)庫(kù),執(zhí)行命令前應(yīng)使用use命令切換到要?jiǎng)h除的數(shù)據(jù)庫(kù),為了防止誤刪可執(zhí)行命令db驗(yàn)證當(dāng)前數(shù)據(jù)庫(kù)是否為指定刪除的數(shù)據(jù)庫(kù)。
2.集合操作
1.創(chuàng)建集合
顯示創(chuàng)建 db.createCollection(COLLECTION NAME, [OPTIONS])
隱式創(chuàng)建 db.COLLECTION NAME.insert(DOCUMENT)
db:表示當(dāng)前數(shù)據(jù)庫(kù)對(duì)象。 createCollection():創(chuàng)建集合方法。DOCUMENT表示文檔。 COLLECTION_NAME表示集合名稱。OPTIONS表示集合配置。 insert():向集合中插入文檔的方法。
2.刪除集合
db:表示當(dāng)前數(shù)據(jù)庫(kù)對(duì)象。 COLLECTION_NAME:表示集合名稱。drop():刪除集合方法。 db.COLLECTION NAME.drop()
3.文檔操作
1.單文檔插入
db.COLLECTION NAME.insert(document)
或者 db.COLLECTION NAME.save(document)
2.多文檔插入
db.COLLECTION NAME.insertMany([document1,document2,...])
db:當(dāng)前數(shù)據(jù)庫(kù)對(duì)象 COLLECTION_NAME:**當(dāng)前集合對(duì)象。insert()和save():插入單文檔方法。 insertMany():插入多文檔方法。 insert()和save()方法的區(qū)別在于,若使用insert()方法插入文檔時(shí),集合中已存在該文檔,則會(huì)報(bào)錯(cuò)。若使用save()方法插入文檔時(shí),集合中已存在該文檔,則會(huì)覆蓋。
3.文檔更新
db:當(dāng)前數(shù)據(jù)庫(kù)對(duì)象。 COLLECTION_NAME:當(dāng)前集合對(duì)象。update():更新文檔方法。 criteria:更新的查詢條件,類似sql中的where。 objNew:新的對(duì)象和操作符,類似sql中的set。 upsert:不存在更新對(duì)象時(shí),是否插入,默認(rèn)為false multi:默認(rèn)為false,只更新查找到的第一個(gè)文檔,反之更新所有。 db.COLLECTION NAME.update(criteria,objNew,upsert, multi)
4.升級(jí)語(yǔ)法
db.集合名.update(條件, 新數(shù)據(jù)){修改器: {鍵:值}}
4.文檔刪除
1.刪除單個(gè)
db.COLLECTION NAME.remove(
2.刪除全部文檔
db.COLLECTION NAME.remove({}) db:當(dāng)前數(shù)據(jù)庫(kù)對(duì)象。 COLLECTION_NAME:當(dāng)前集合對(duì)象。remove():刪除文檔方法。 query:刪除文檔的條件,可選參數(shù)。 justOne:的boolean為true或1時(shí),表示只刪除查詢出的第一個(gè)文檔。writeConcern: 表示拋出異常級(jí)別。
3.文檔簡(jiǎn)單查詢
查詢所有文檔語(yǔ)法 db.COLLECTION NAME.find()
查詢所有文檔,以易讀的方式展示 db:當(dāng)前數(shù)據(jù)庫(kù)對(duì)象 COLLECTION_NAME:當(dāng)前集合對(duì)象 find():查詢所有文檔方法 pretty():格式化查詢返回結(jié)果 db.COLLECTION NAME.find().pretty()
5.聚合查詢
1.語(yǔ)法
db.集合名稱.aggregate([ {管道:{表達(dá)式}} .... ])
其中“[]”不是必須的,可以省略!?。?/p>
6.索引優(yōu)化
1.介紹?
MongoDB數(shù)據(jù)庫(kù)提供了多樣性的索引支持,因此可以提高查詢集合中文檔的效率。若是沒(méi)有索引,MongoDB數(shù)據(jù)庫(kù)必須執(zhí)行全集合掃描(即掃描集合中的每一個(gè)文檔),從而篩選出與查詢條件相匹配的文檔。這種掃描全集合的查詢效率是非常低的,尤其是在處理海量數(shù)據(jù)時(shí),執(zhí)行查詢操作需要花費(fèi)幾十秒甚至幾分鐘的時(shí)間,這無(wú)疑對(duì)網(wǎng)站的性能是非常致命的。若是執(zhí)行查詢操作時(shí),集合中的文檔存在適當(dāng)?shù)乃饕?,MongoDB就可以使用該索引限制必須檢查的文檔數(shù)量。 ?索引是一種特殊的數(shù)據(jù)結(jié)構(gòu),即采用B-Tree數(shù)據(jù)結(jié)構(gòu)。索引是以易于遍歷讀取的形式存儲(chǔ)著集合中文檔的一小部分,文檔的一小部分指文檔中的特定字段或一/多組字段,并且這些字段均按照字段的值進(jìn)行排序。索引項(xiàng)的排序支持有效的等值匹配和基于范圍的查詢操作。此外,MongoDB還可以使用索引中的排序返回排序的結(jié)果。
2.單字段索引
MongoDB支持在文檔的單個(gè)字段上創(chuàng)建用戶定義的升序/降序索引,因此被稱為單字段索引(SingleField Index)。默認(rèn)情況下,MongoDB中所有集合在“_id”字段上都有一個(gè)索引,用戶也可以根據(jù)自己的需求添加額外索引來(lái)支持重要的查詢和操作。由于MongoDB可以從任何方向遍歷索引,因此對(duì)于單個(gè)字段索引和排序操作來(lái)說(shuō),索引項(xiàng)的排序順序(即升序或降序)并不重要。
3.復(fù)合索引
MongoDB除了支持單字段索引外,還支持復(fù)合索引。所謂復(fù)合索引,就是包含多個(gè)字段的索引,一個(gè)復(fù)合索引最多可以包含31個(gè)字段。需要注意的是,若某字段屬于哈希索引,則這時(shí)復(fù)合索引就不能包括該字段。
4.多鍵索引
若文檔中的字段為數(shù)組類型,則每個(gè)字段都是數(shù)組中的一個(gè)元素,MongoDB將會(huì)為數(shù)組中的每個(gè)元素創(chuàng)建索引,因此被稱為多鍵索引(Multikey Index)。多鍵索引允許通過(guò)匹配數(shù)組的一個(gè)或多個(gè)元素來(lái)查詢包含該數(shù)組的文檔。如果索引字段包含數(shù)組值,則MongoDB會(huì)自動(dòng)確定是否創(chuàng)建多鍵索引,而無(wú)需顯式地指定創(chuàng)建多鍵索引。
5.查看索引
db.COLLECTION NAME.getIndexes()
6.查看索引大小
db.COLLECTION NAME.totalIndexSize()
7.創(chuàng)建索引
db.COLLECTION NAME.createIndex(keys,options)
keys:指定索引鍵及排序順序,該參數(shù)值為文檔類型,key用于指定索引鍵,value指定排序順序,1為升序,-1為降序。 options:用于控制創(chuàng)建索引的選項(xiàng),常見(jiàn)選項(xiàng)有unique和name,其中unique描述建立的索引是否唯一,默認(rèn)為false。name描述所創(chuàng)建索引的名稱,默認(rèn)情況下MongoDB會(huì)通過(guò)連接索引的字段名和排序順序生成一個(gè)索引名稱。
8.刪除索引
1.刪除所有索引
db.COLLECTION NAME.dropIndexes()
2.刪除單個(gè)索引
db.COLLECTION NAME.dropIndex(index) 參數(shù)index,其數(shù)據(jù)類型為字符串或文檔,可用于指定要?jiǎng)h除的索引.
9.API訪問(wèn)
1.通過(guò)python訪問(wèn)MongoDB
Python 要連接 MongoDB 需要 MongoDB 驅(qū)動(dòng),這里我們使用 PyMongo 驅(qū)動(dòng)來(lái)連接。
1.pip 安裝
pip 是一個(gè)通用的 Python 包管理工具,提供了對(duì) Python 包的查找、下載、安裝、卸載的功能。安裝 pymongo:
pip install pymongo
也可以指定安裝的版本: pip install pymongo==3.5.1
更新 pymongo 命令: pip install upgrade pymongo
2.創(chuàng)建數(shù)據(jù)庫(kù)
創(chuàng)建數(shù)據(jù)庫(kù)需要使用 MongoClient 對(duì)象,并且指定連接的 URL 地址和要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)名。如下實(shí)例中,我們創(chuàng)建的數(shù)據(jù)庫(kù) runoobdb :
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["runoobdb"]
注意: 在 MongoDB 中,數(shù)據(jù)庫(kù)只有在內(nèi)容插入后才會(huì)創(chuàng)建! 就是說(shuō),數(shù)據(jù)庫(kù)創(chuàng)建后要?jiǎng)?chuàng)建集合(數(shù)據(jù)表)并插入一個(gè)文檔(記錄),數(shù)據(jù)庫(kù)才會(huì)真正創(chuàng)建。
3.判斷數(shù)據(jù)庫(kù)是否已存在
我們可以讀取 MongoDB 中的所有數(shù)據(jù)庫(kù),并判斷指定的數(shù)據(jù)庫(kù)是否存在:
list_database_names()。 import pymongo myclient = pymongo.MongoClient('mongodb://localhost:27017/') dblist = myclient.list database names() # dblist = myclient.database names() if "runoobdb" in dblist: print("數(shù)據(jù)庫(kù)已存在!") 注意:database_names 在最新版本的 Python 中已廢棄,Python3.7+ 之后的版本改為了
2.創(chuàng)建一個(gè)集合
MongoDB 使用數(shù)據(jù)庫(kù)對(duì)象來(lái)創(chuàng)建集合,實(shí)例如下:
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["runoobdb"] mycol = mydb["sites"] 注意: 在 MongoDB 中,集合只有在內(nèi)容插入后才會(huì)創(chuàng)建! 就是說(shuō),創(chuàng)建集合(數(shù)據(jù)表)后要再插入一個(gè)文檔(記錄),集合才會(huì)真正創(chuàng)建。
1.判斷集合是否已存在
我們可以讀取 MongoDB 數(shù)據(jù)庫(kù)中的所有集合,并判斷指定的集合是否存在:
import pymongo myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['runoobdb'] collist = mydb. list collection names() # collist = mydb.collection names() if "sites" in collist: # 判斷 sites 集合是否存在 print("集合已存在!") 注意:collection_names 在最新版本的 Python 中已廢棄,Python3.7+ 之后的版本改為了 list_collection_names()。
3.增、刪、改、查等操作
1.Python Mongodb 插入文檔
插入集合 集合中插入文檔使用 insert_one() 方法,該方法的第一參數(shù)是字典 name => value 對(duì)。以下實(shí)例向 sites 集合中插入文檔:import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["runoobdb"]mycol = mydb["sites"] mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" } x = mycol.insert one(mydict) print(x)
2.返回 _id 字段
insert_one() 方法返回 InsertOneResult 對(duì)象,該對(duì)象包含 inserted_id 屬性,它是插入文檔的 id值。 myclient = pymongo.MongoClient('mongodb://localhost:27017/')mydb = myclient['runoobdb']mycol = mydb["sites"] mydict = { "name": "Google", "alexa": "1", "url": "https://www.google.com" } x = mycol.insert one(mydict) print(x.inserted id)
如果我們?cè)诓迦胛臋n時(shí)沒(méi)有指定 _id,MongoDB 會(huì)為每個(gè)文檔添加一個(gè)唯一的 id。
柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫(kù) mongodb基本操作
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。