MongoDB學(xué)習(xí)筆記(入門)

mongodb學(xué)習(xí)筆記(入門)Posted on 一、文檔的注意事項(xiàng) : 1. 鍵值對(duì)是有序的,如:{ “name” : “stephen”, “genda” : “male” } 不等于 { “genda” : “male”, “name” : “stephen” } 2. 文檔信息是大小寫敏感的,如:{ “name” : “stephen” } 不等于 { “Name” : “s

MongoDB學(xué)習(xí)筆記(入門) Posted on

MongoDB學(xué)習(xí)筆記(入門)

一、文檔的注意事項(xiàng)
1.? 鍵值對(duì)是有序的,網(wǎng)站空間,如:{ “name” : “stephen”, “genda” : “male” } 不等于 { “genda” : “male”, “name” : “stephen” }
2.? 文檔信息是大小寫敏感的,如:{ “name” : “stephen” } 不等于 { “name” : “stephen” }
3.? 文檔信息是區(qū)分類型的,如:{ “age” : 30 } 不等于 { “age” : “30” }
4.? 文檔中不能出現(xiàn)重復(fù)鍵,如:{ “name” : “stephen”, “name” : “liu” }

?

二、使用多個(gè)集合的必要性:
1.? 如果把各種模式的文檔存放在一個(gè)集合中,對(duì)于開發(fā)者來說是非常災(zāi)難的。因?yàn)樵讷@取到查詢結(jié)果之后,就需要手工編寫代碼過濾不同類型的文檔了。
2.? 會(huì)使查詢效率降低。試想一下,假設(shè)某個(gè)模式的文檔的數(shù)據(jù)量相對(duì)較少,如果仍然將其放到一個(gè)通用的大集合中,其查詢效率勢必會(huì)大大低于將其放到獨(dú)立的集合中。
3.? 在創(chuàng)建索引時(shí),如果所有的文檔均為同一模式,香港服務(wù)器租用,那么索引的利用率將會(huì)更加高效。

?

三、集合的命名注意事項(xiàng):
1.? 集合名不能是空字符串””。
2.? 不要以system開頭,這一般是為系統(tǒng)保留的,如system.users集合中保存了數(shù)據(jù)庫的用戶信息,而system.namespace集合中保留了數(shù)據(jù)庫集合的信息。
3.? 不要在集合名里面包含’$’字符。
4.? 子集合只是一種較好的集合規(guī)劃方式,香港服務(wù)器租用,如blog.posts和blog.anthurs,實(shí)際上它們和blog集合之間沒有任何關(guān)系,甚至blog集合可以不存在。

?

四、數(shù)據(jù)庫:
在同一個(gè)MongoDB服務(wù)器中可以存在多個(gè)數(shù)據(jù)庫,每個(gè)不同的數(shù)據(jù)庫存儲(chǔ)在不同的文件中。又由于數(shù)據(jù)庫名和文件名是綁定的,因此數(shù)據(jù)庫名會(huì)有一些限制。
1.? 不能是空字符””。
2.? 全部小寫且不超過64字節(jié)。
3.? 不得含有文件名命名中的非法字符。
4.? admin數(shù)據(jù)庫是管理數(shù)據(jù)庫,如果某個(gè)用戶位于該數(shù)據(jù)庫中,他將自動(dòng)繼承所有數(shù)據(jù)庫權(quán)限。一些特定的服務(wù)器命令也只能從這個(gè)數(shù)據(jù)庫運(yùn)行。
5.? local這個(gè)數(shù)據(jù)庫永遠(yuǎn)不會(huì)被復(fù)制,只是用于存儲(chǔ)限于本地單臺(tái)服務(wù)器的任意集合。
6.? 數(shù)據(jù)庫名.集合名,表示該集合的完全限定名,其長度不要超過121自己。

?

五:MongoDB的啟動(dòng):
1.? 直接執(zhí)行mongod即可,在沒有任何命令行參數(shù)的情況下,服務(wù)器的主機(jī)中必須包含/data/db目錄,對(duì)于Windows而言,其缺省目錄則為服務(wù)程序所在驅(qū)動(dòng)器的datadb。如D盤,則為D:databin。缺省監(jiān)聽端口為27017。
2.? MongoDB自帶了一個(gè)JavaScript Shell,可以從命令行與MongoDB交互。如:mongo。這個(gè)Shell工具可以直接執(zhí)行簡單的數(shù)學(xué)運(yùn)算。如:

??? > x = 200
????200
????> x /5
?? ?40
??? –還可以調(diào)用JavaScript的標(biāo)準(zhǔn)庫。
??? > new Date(“2012/05/05”)
??? ISODate(“2012-05-04T16:00:00Z”)
??? > “Hello World”.replace(“World”, “MongoDB”)
?? ?Hello MongoDB
??? –定義和調(diào)用自定義的JavaScript函數(shù)。
????> function factorial(n) {
? ??… if (n ?? ?… return n * factorial(n – 1)
??? … }
??? > factorial(5)
??? 120
3.? 在Shell客戶端插入MongoDB的文檔,如:
??? > post = { “title” : “my blog post”, “content” : “Here’s my blog”, “date” : new Date() }
??? {
???????? “title” : “my blog post”,
???????? “content” : “Here’s my blog”,
???????? “date” : ISODate(“2012-06-04T07:38:51.345Z”)
??? }
?? ?> db.blog.insert(post)
??? > db.blog.find()
??? { “_id” : ObjectId(“4fcc661de4bcbac15b3d9e3a”), “title” : “my blog post”, “content” : “Here’s my blog”,
??? “date” : ISODate(“2012-06-04T07:38:51.345Z”) }

4.? 在Shell客戶端查詢文檔,如:
??? > db.blog.findOne()
??? {
???????? “_id” : ObjectId(“4fcc661de4bcbac15b3d9e3a”),
???????? “title” : “my blog post”,
???????? “content” : “Here’s my blog”,
???????? “date” : ISODate(“2012-06-04T07:38:51.345Z”)
??? }
5.? 在Shell中更新文檔,如:
??? –需要先更新post變量的內(nèi)容,即先增加了一個(gè)comments的鍵,其值為空數(shù)組。
??? > post.comments = []
??? [ ]
??? –update的第一個(gè)參數(shù)是條件,第二個(gè)參數(shù)是待更新的值。
??? > db.blog.update({ “title” : “my blog post”}, post)
??? > db.blog.findOne()
??? {
???????? “_id” : ObjectId(“4fcc661de4bcbac15b3d9e3a”),
???????? “title” : “my blog post”,
???????? “content” : “Here’s my blog”,
???????? “date” : ISODate(“2012-06-04T07:38:51.345Z”),
???????? “comments” : [ ]
??? }
6.? 在Shell客戶端中刪除,如:
??? –如果remove中沒有條件,則清除集合中的全部數(shù)據(jù)。
??? > db.blog.remove( { title:”my blog post”})
??? > db.blog.findOne()
??? null

?

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊7 分享