日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

MongoDB——Shell的基本操作及使用窍门

發(fā)布時(shí)間:2025/1/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MongoDB——Shell的基本操作及使用窍门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MongoDB自帶一個(gè)JavaScript shell,可以從命令行與MongoDB實(shí)例交互。這個(gè) shell非常有用,通過(guò)它可以執(zhí)行管理操作、檢査運(yùn)行實(shí)例,亦或做其他嘗試。這個(gè) mongo shell對(duì)于使用MongoDB來(lái)說(shuō)是至關(guān)重要的工具,本書(shū)后面也會(huì)經(jīng)常使用這 個(gè)工具。

  • 運(yùn)行shell

運(yùn)行mongo啟動(dòng)shell:

$ ./mongo MongoDB shell version: 1.6.0 url: test connecting to: test type "help" for help

shell會(huì)在啟動(dòng)時(shí)自動(dòng)連接MongoDB服務(wù)器,所以要確保在使用shell之前啟動(dòng)mongodo shell是功能完備的JavaScript解釋器,可以運(yùn)行任何JavaScript程序。為了證明這 一點(diǎn),我們運(yùn)行幾個(gè)簡(jiǎn)單的數(shù)學(xué)運(yùn)算:

>x = 200 200 >x / 5; 40

還可以充分利用JavaScript的標(biāo)準(zhǔn)庫(kù)。

>Math.sin(Math.PI / 2); 1 >new Date(''2010/l/l"); "Fri Jan 01 2010 00:00:00 GMT-0500 (EST)? >"Hello, World! " . replace ("World, "MongoDB"); Hello, MongoDB!

也可以定義和調(diào)用JavaScript函數(shù):

>function factorial (n) { ...if (n <= 1) return 1; ... return n * factorial(n - 1); ---} >factorial(5); 120

注意,可以使用多行命令。這個(gè)shell會(huì)檢測(cè)輸入的JavaScript語(yǔ)句是否寫(xiě)完,如沒(méi) 寫(xiě)完還可以在下一行接著寫(xiě)。

  • MongoDB 客戶(hù)端

雖然能運(yùn)行任意JavaScript程序很酷,但shell的真正威力還在于它是一個(gè)獨(dú)立的Mongo- DB客戶(hù)端。開(kāi)啟的時(shí)候,shell會(huì)連到MongoDB服務(wù)器的test數(shù)據(jù)庫(kù),并將這個(gè)數(shù)據(jù) 庫(kù)連接賦值給全局變量dbo這個(gè)變量是通過(guò)sheU訪(fǎng)問(wèn)MongoDB的主要入口點(diǎn)。
shell還有些非JavaScript語(yǔ)法的擴(kuò)展,是為了方便習(xí)慣于SQL shell的用戶(hù)而添加 的。這些擴(kuò)展并不提供額外的功能,但它們是很棒的語(yǔ)法糖。例如,最重要的操作 之一就是選擇要使用的數(shù)據(jù)庫(kù):

>use foobar switched to db foobar

現(xiàn)在如果看看db,會(huì)發(fā)現(xiàn)其指向foobar數(shù)據(jù)庫(kù):

>db foobar

因?yàn)檫@是一個(gè)JavaScript shell,所以鍵入一個(gè)變量會(huì)將變量的值轉(zhuǎn)換為字符串(這 里就是數(shù)據(jù)庫(kù)名)并打印出來(lái)。
可以通過(guò)db變量來(lái)訪(fǎng)問(wèn)其中的集合。例如db.baz返回當(dāng)前數(shù)據(jù)庫(kù)的baz集合。既然 現(xiàn)在可以在shell中訪(fǎng)問(wèn)集合,那么基本上就可以執(zhí)行幾乎所有的數(shù)據(jù)庫(kù)操作了。

  • shell中的基本操作

在shell査看操作數(shù)據(jù)會(huì)用到4個(gè)基本操作:創(chuàng)建、讀取、更新和刪除(CRUD)。

  • 1.創(chuàng)建

insert函數(shù)添加一個(gè)文檔到集合里面。例如,假設(shè)要存儲(chǔ)一篇博客文章。首先, 創(chuàng)建一個(gè)局部變量post,內(nèi)容是代表文檔的JavaScript對(duì)象。里面會(huì)有"title", “content"和"date”(發(fā)表日期)幾個(gè)鍵。

>post = ( nti11 e11 : "My Blog Post11, ..."content" : "Here's my blog post.", ...ndate11 : new Date () } ( "title" : "My Blog Post", "content" : "Here * s my blog post.H, "date" : "Sat Dec 12 2009 11:23:21 GMT-0500 (EST)" }

這個(gè)對(duì)象是個(gè)有效的MongoDB文檔,所以可以用insert方法將其保存到blog集 合中:

>db ..blog. insert (post)

這篇文章已經(jīng)被存到數(shù)據(jù)庫(kù)里面了。可以調(diào)用集合的find方法來(lái)査看一下:

>db.blog.find() ( : Objectld(,,4b2 3c3ca752 5f35f94b6 0a2d"), : "My Blog Post", "content" : "Here 1s my blog post.", "date" : "Sat Dec 12 2009 11:23:21 GMT-0500 (EST)" }

除了我們輸入的鍵/值對(duì)都完整地被保存下來(lái),還有一個(gè)額外添加的鍵?_id"o本 章的最后會(huì)解釋"_id"突然出現(xiàn)的原因。

  • 2.讀取

find會(huì)返回集合里面所有的文檔。若只是想査看一個(gè)文檔,可以用findOne:

>db.blog.findOne() {"_id" : Objectld( ''4b2 3c3ca7525f3 5f94b60a2d?),"title11 : "My Blog Post","content” : "Here's my blog post.","date" : "Sat Dec 12 2009 11:23:21 GMT-0500 (EST)" }

find和f indOne可以接受査詢(xún)文檔形式的限定條件。這將通過(guò)査詢(xún)限制匹配的文 檔。使用find時(shí),shell自動(dòng)顯示最多20個(gè)匹配的文檔,但可以獲取更多文檔。

  • 3.更新

如果要更改博客文章,就要用到update To update接受(至少)兩個(gè)參數(shù):第一 個(gè)是要更新文檔的限定條件,第二個(gè)是新的文檔。假設(shè)決定給我們先前寫(xiě)的文章增 加評(píng)論內(nèi)容,則需要增加一個(gè)新的鍵,對(duì)應(yīng)的值是存放評(píng)論的數(shù)組。
第一步修改變量post,增加"comments"鍵:

>post.comments = [] []

然后執(zhí)行update操作,用新版本的文檔替換標(biāo)題為aMy Blog Post"的文章:

>db.blog.update((title : "My Blog Post"}, post)

文檔已經(jīng)有了”comments”鍵。再用find査看一下,可以看到新的鍵:

>db.blog.find() {"_id": ObjectId(M4b23c3ca7525f35f94b60a2dn),"title" : "My Blog Post"t"content" : MHere's my blog post.","date" : "Sat Dec 12 2009 11:23:21 GMT-0500 (EST)","comments":[] }
  • 4.刪除

remove用來(lái)從數(shù)據(jù)庫(kù)中永久性地刪除文檔。在不使用參數(shù)進(jìn)行調(diào)用的情況下,它 會(huì)刪除一個(gè)集合內(nèi)的所有文檔。它也可以接受一個(gè)文檔以指定限定條件。例如,下 面的命令會(huì)刪除我們剛剛創(chuàng)建的文章:

>db.blog.remove((title : "My Blog Post"})

集合現(xiàn)在又是空的了。

  • 使用shell的竅門(mén)

由于mongo是個(gè)JavaScript shell,通過(guò)在線(xiàn)査看JavaScript的文檔能獲得很多幫助。 shell本身內(nèi)置了幫助文檔,可以通過(guò)help命令査看。

>help HELP show dbs show database names show collections in current database show users in current database show recent system.profile entries w. time >= Iras set current database to <db name> help on DB methods help on collection methods . list objects in collection foo list objects in foo where a == 1 result of the last line evaluated

使用db.help ()可以査看數(shù)據(jù)庫(kù)級(jí)別的命令的幫助,集合的相關(guān)幫助可以通過(guò)db. foo. help ()來(lái)査看。
有個(gè)了解函數(shù)功用的技巧,就是在輸入的時(shí)候不要輸括號(hào)。這樣就會(huì)顯示該函數(shù)的 JavaScript源代碼。例如,如果想看看update的機(jī)理,或者就是為了看看參數(shù)順 序,可以這么做:

> db.foo.update function (query, obj, upsert, multi) {assert(query, Mneed a query");assert(obj, Hneed an obj ect"); this._validateObject(obj); this._mongo.update(this._fullName, query, obj, upsert ? true : false, multi ? true : false); }

要査看shell提供的所有自動(dòng)生成的JavaScript函數(shù)API文檔,可訪(fǎng)問(wèn)http://api.mon- godb.org/jso
蹩腳的集合名
使用db.集合名的方式來(lái)訪(fǎng)問(wèn)集合一般不會(huì)有問(wèn)題,但如果集合名恰好是數(shù)據(jù)庫(kù)類(lèi) 的一個(gè)屬性就有問(wèn)題了。例如,要訪(fǎng)問(wèn)version這個(gè)集合,使用db. vers ion就 不行,因?yàn)閐b.version是個(gè)數(shù)據(jù)庫(kù)函數(shù)(它返回正在運(yùn)行的MongoDB服務(wù)器的 版本)。

>db.version function (){return this.serverBuildlnfo().version; }

當(dāng)JavaScript只有在db中找不到指定的屬性時(shí),才會(huì)將其作為集合返回。當(dāng)有屬性 與目標(biāo)集合同名時(shí),可以使用getCollection函數(shù):

>db.getCollection("version"); test.version

要査看名稱(chēng)中含有無(wú)效JavaScript字符的集合,這個(gè)函數(shù)也可以派上用場(chǎng)。比如£。。-
bar是個(gè)有效的集合名,但是在JavaScript中就變成了變量相減了。通過(guò)db.get- Collection ( " f oo-bax")可以得到 f oo-bax 集合。
在JavaScript中,x.y與x[‘y’]完全等價(jià)。這就意味著不但可以直“呼”其名,也可 以使用變量來(lái)訪(fǎng)問(wèn)子集合。也就是說(shuō),當(dāng)需要對(duì)blog的每個(gè)子集合執(zhí)行操作時(shí),只需 要像下面這樣迭代就好了:

var collections = ["posts" z "comments**, "authors"]for (i in collections) ( doStuff(db.blog [collections[i]]); }

而不是使用下面這種笨笨的寫(xiě)法:

doStuff(db.blog.posts); doStuff(db.blog.comments); doStuff(db.blog.authors);

總結(jié)

以上是生活随笔為你收集整理的MongoDB——Shell的基本操作及使用窍门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。