在本文中,將介紹mongo shell的基本知識(shí),以及如何使用它來(lái)管理MongoDB文檔。為了使讀者更容易地理解和實(shí)踐概念,MongoDB
shell的引入被分成了三個(gè)部分。
一、MongoDB Shell 的基本查詢(xún) 本部分將簡(jiǎn)要討論CRUD操作(創(chuàng)建、讀取、更新和刪除)。使用基本的示例和練習(xí),您將了解如何在MongoDB中執(zhí)行這些操作。同時(shí),了解如何在MongoDB中執(zhí)行查詢(xún)。 與用于查詢(xún)的傳統(tǒng)SQL不同,MongoDB使用它自己的類(lèi)似于json的查詢(xún)從存儲(chǔ)的數(shù)據(jù)中檢索信息的語(yǔ)言。 在成功安裝MongoDB之后,正如在第5章中所解釋的那樣,您將導(dǎo)航到目錄 [C:\practicalmongodb\bin\] 這個(gè)文件夾擁有運(yùn)行MongoDB的所有可執(zhí)行文件。 MongoDB shell可以通過(guò)執(zhí)行mongo可執(zhí)行文件來(lái)啟動(dòng)。 第一步總是要啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器。打開(kāi)命令提示符(將其運(yùn)行為管理員)并發(fā)出命令CD。 接下來(lái),運(yùn)行命令C:實(shí)用的mongodb bin mongod.exe。(如果安裝在某些情況下其他文件夾,路徑會(huì)相應(yīng)地改變。對(duì)于本章中的例子,安裝在C:\practicalmongodb文件夾。)這將啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器。 默認(rèn)情況下,MongoDB會(huì)偵聽(tīng)本地主機(jī)接口端口27017的任何傳入連接。 現(xiàn)在數(shù)據(jù)庫(kù)服務(wù)器已經(jīng)啟動(dòng),可以使用下面的命令向服務(wù)器發(fā)出命令mongo shell。 在您查看mongo shell之前,讓我們簡(jiǎn)要了解一下如何使用導(dǎo)入/導(dǎo)出工具導(dǎo)入在MongoDB數(shù)據(jù)庫(kù)中導(dǎo)出數(shù)據(jù)。 首先,創(chuàng)建一個(gè)CSV文件,以保存以下結(jié)構(gòu)的學(xué)生的記錄:名字,性別,階級(jí),分?jǐn)?shù),年齡。 接下來(lái),將MongoDB數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)入到一個(gè)新的集合中,以便查看導(dǎo)入工具。 簡(jiǎn)而言之,你所做的是: 1.連接到 Mongo Shell。 2.切換到你要用的數(shù)據(jù)庫(kù),例如admin。 3.檢查在admin數(shù)據(jù)庫(kù)中存在的表,并show collections查看。 4.核對(duì)你使用導(dǎo)入工具導(dǎo)入的表和數(shù)據(jù)。 5.最后,之星find()命令來(lái)查看新表中的數(shù)據(jù)。 也可以使用help命令來(lái)查看相關(guān)指令。 在開(kāi)始探索之前,讓我們先簡(jiǎn)要介紹一下MongoDB術(shù)語(yǔ)和概念對(duì)應(yīng)于SQL術(shù)語(yǔ)和概念。表6-1總結(jié)了這一點(diǎn)。 1.1 Create
and Insert 現(xiàn)在,您將了解如何創(chuàng)建數(shù)據(jù)庫(kù)和集合。如前所述,這些文檔MongoDB是JSON格式的。 首先,通過(guò)發(fā)出db命令,您將確認(rèn)上下文是mydbpoc數(shù)據(jù)庫(kù)。 > db mydbpoc 現(xiàn)在,您將看到如何創(chuàng)建文檔。 第一個(gè)文檔符合第一個(gè)原型而第二個(gè)文檔則符合第二個(gè)原型。 您已經(jīng)創(chuàng)建了兩個(gè)名為user1和user2的文檔。 接下來(lái),您將按照以下順序?qū)⑦@兩個(gè)文檔(user1和user2)添加到用戶(hù)集合中的操作: > db.users.insert(user1) > db.users.insert(user2) 上面的操作不僅會(huì)將這兩個(gè)文檔插入到用戶(hù)的集合中,而且還會(huì)創(chuàng)建集合以及數(shù)據(jù)庫(kù)。 同樣可以使用show collection和show dbs進(jìn)行驗(yàn)證命令。 如前所述,dbs將顯示數(shù)據(jù)庫(kù)的列表。 show collections 將在當(dāng)前數(shù)據(jù)庫(kù)中顯示集合的列表。 與集合用戶(hù)一起,系統(tǒng)。索引集合也會(huì)顯示出來(lái)。這個(gè)系統(tǒng)。索引收集是在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)默認(rèn)創(chuàng)建的。它管理著所有的信息數(shù)據(jù)庫(kù)中所有集合的索引。 執(zhí)行命令db.users.find()將在用戶(hù)集合中顯示文檔。 ![]() 您可以看到您創(chuàng)建的兩個(gè)文檔被顯示出來(lái)。除了你添加到的字段之外對(duì)于所有的文檔,都會(huì)生成一個(gè)額外的id字段。所有文檔必須具有惟一的id字段。 如果您沒(méi)有明確指定,那么將自動(dòng)分配相同的值作為MongoDB的唯一對(duì)象ID,如上例所示。您沒(méi)有顯式地插入一個(gè)id字段,但是當(dāng)您使用find()命令來(lái)顯示文檔時(shí) 可以看到與每個(gè)文檔相關(guān)聯(lián)的id字段。這背后的原因是,默認(rèn)情況下,索引是在id字段上創(chuàng)建的,可以通過(guò)發(fā)出該字段來(lái)驗(yàn)證在系統(tǒng)上找到命令。收集索引。 ![]() 可以使用ensureIndex()和dropIndex()從集合中添加或刪除新索引命令。我們將在本章后面討論這個(gè)問(wèn)題。默認(rèn)情況下,在所有id字段上創(chuàng)建一個(gè)索引集合。 這個(gè)默認(rèn)索引不能被刪除。 1.2 Explicitly
Creating Collections 在上面的例子中,第一個(gè)插入操作隱式地創(chuàng)建了集合。但是,用戶(hù)也可以在執(zhí)行insert語(yǔ)句之前顯式地創(chuàng)建一個(gè)集合。 1.3 Inserting
Documents Using Loop 還可以使用for循環(huán)將文檔添加到集合中。下面的代碼將插入用戶(hù)使用的代碼。 ![]() 為了驗(yàn)證插入是否成功,可以在集合上運(yùn)行find命令。 ![]() 用戶(hù)出現(xiàn)在集合中。在您進(jìn)一步了解之前,讓我們先了解一下它的“類(lèi)型”聲明。find命令將一個(gè)光標(biāo)返回到結(jié)果集,而不是顯示所有的文檔(可以是成千上萬(wàn)的結(jié)果)在一個(gè)屏幕上,光標(biāo)顯示了前20個(gè)文檔并等待請(qǐng)求迭代(it)顯示下一個(gè)20,直到所有結(jié)果集都顯示出來(lái)。所產(chǎn)生的光標(biāo)也可以被分配給一個(gè)變量,然后通過(guò)編程方式對(duì)其進(jìn)行迭代使用while循環(huán)。光標(biāo)對(duì)象也可以作為數(shù)組進(jìn)行操作。在您的例子中,如果您輸入“it”并按Enter鍵,下面將顯示以下內(nèi)容: ![]() 因?yàn)橹皇O聝蓚€(gè)文檔,所以它顯示剩下的兩個(gè)文檔。 ![]() 1.4 Inserting
by Explicitly Specifying _id 在前面的插入示例中,沒(méi)有指定id字段,因此它是隱式添加的。在接下來(lái)的例如,您將看到如何在一個(gè)集合中插入文檔時(shí)顯式地指定id字段。在顯式地指定id字段時(shí),您必須記住字段的惟一性;否則插入就會(huì)失敗。 ![]() 1.5 Update 在本節(jié)中,您將探索update()命令,該命令用于更新集合中的文檔。update()方法在默認(rèn)情況下更新一個(gè)文檔。如果你需要更新所有的文檔匹配選擇條件,您可以通過(guò)將多個(gè)選項(xiàng)設(shè)置為true來(lái)實(shí)現(xiàn)。讓我們從更新現(xiàn)有列的值開(kāi)始。$set操作符將用于更新的記錄。下面的命令更新了所有女性用戶(hù)的英國(guó): ![]() 要檢查更新是否已經(jīng)發(fā)生,請(qǐng)發(fā)出一個(gè)find命令來(lái)檢查所有的女性用戶(hù)。 ![]() 如果檢查輸出,就會(huì)看到只有第一個(gè)文檔記錄被更新,這是默認(rèn)值由于沒(méi)有指定多個(gè)選項(xiàng),所以更新的行為。 現(xiàn)在,讓我們更改update命令,并包含多選項(xiàng): ![]() 再次發(fā)出find命令來(lái)檢查這個(gè)國(guó)家是否已經(jīng)為所有女性更新過(guò)員工或不是。發(fā)出find命令將返回以下輸出: ![]() 正如您所看到的,這個(gè)國(guó)家被更新到英國(guó),以滿(mǎn)足所有符合條件的記錄。 在實(shí)際應(yīng)用程序中工作時(shí),您可能會(huì)遇到可能出現(xiàn)的模式演化最后從文檔中添加或刪除字段。我們來(lái)看看如何在這個(gè)過(guò)程中進(jìn)行這些修改MongoDB數(shù)據(jù)庫(kù)。 update() 操作可以在文檔級(jí)別使用,這有助于更新單個(gè)文件在一個(gè)集合中文檔或一組文檔。 接下來(lái),讓我們看看如何向文檔中添加新字段。為了向文檔中添加字段,使用使用$set操作符和多選項(xiàng)的update()命令。 如果使用$set的字段名,這是不存在的,那么該字段將被添加到文檔中。下面的命令將把字段公司添加到所有文檔: ![]() 對(duì)用戶(hù)的集合發(fā)出find命令,您將發(fā)現(xiàn)添加到所有文檔的新字段 ![]() 如果您使用文檔中已有的字段執(zhí)行update()命令,它將更新該字段價(jià)值;但是,如果該字段沒(méi)有出現(xiàn)在文檔中,那么該字段將被添加到文檔中。 接下來(lái),您將看到如何使用$unset操作符使用相同的update()命令來(lái)刪除字段從文檔。 以下命令將從所有文檔中刪除字段公司: ![]() 可以通過(guò)向用戶(hù)集合發(fā)出find()命令來(lái)檢查這一點(diǎn)。你可以看到公司字段已從文件中刪除。 ![]() 1.6 Delete 要?jiǎng)h除集合中的文檔,請(qǐng)使用remove()方法。如果你指定了一個(gè)選擇條件符合標(biāo)準(zhǔn)的文件將被刪除。如果沒(méi)有指定任何標(biāo)準(zhǔn),那么所有的文檔將被刪除。 下面的命令將刪除性別='M': ![]() 可以通過(guò)向用戶(hù)發(fā)出find()命令來(lái)驗(yàn)證這一點(diǎn): ![]() 沒(méi)有返回的文檔。 以下命令將刪除所有文檔: ![]() 如您所見(jiàn),沒(méi)有返回任何文檔。 最后,如果您想要?jiǎng)h除集合,下面的命令將刪除集合: ![]() 為了驗(yàn)證是否刪除了集合,發(fā)出show集合命令。 ![]() 正如您所看到的,集合名稱(chēng)沒(méi)有顯示,確認(rèn)已經(jīng)刪除了集合從數(shù)據(jù)庫(kù)中。在介紹了基本的創(chuàng)建、更新和刪除操作之后,下一節(jié)將向您展示如何執(zhí)行讀操作。
|
|
來(lái)自: liang1234_ > 《MongoDB》