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