MongoDB教程之入門(mén)基礎(chǔ)知識(shí)
一、文檔的注意事項(xiàng):
1. 鍵值對(duì)是有序的,如:{ "name" : "stephen", "genda" : "male" } 不等于 { "genda" : "male", "name" : "stephen" }
2. 文檔信息是大小寫(xiě)敏感的,如:{ "name" : "stephen" } 不等于 { "Name" : "stephen" }
3. 文檔信息是區(qū)分類(lèi)型的,如:{ "age" : 30 } 不等于 { "age" : "30" }
4. 文檔中不能出現(xiàn)重復(fù)鍵,如:{ "name" : "stephen", "name" : "liu" }
二、使用多個(gè)集合的必要性:
1. 如果把各種模式的文檔存放在一個(gè)集合中,對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是非常災(zāi)難的。因?yàn)樵讷@取到查詢結(jié)果之后,就需要手工編寫(xiě)代碼過(guò)濾不同類(lèi)型的文檔了。
2. 會(huì)使查詢效率降低。試想一下,假設(shè)某個(gè)模式的文檔的數(shù)據(jù)量相對(duì)較少,如果仍然將其放到一個(gè)通用的大集合中,其查詢效率勢(shì)必會(huì)大大低于將其放到獨(dú)立的集合中。
3. 在創(chuàng)建索引時(shí),如果所有的文檔均為同一模式,那么索引的利用率將會(huì)更加高效。
三、集合的命名注意事項(xiàng):
1. 集合名不能是空字符串""。
2. 不要以system開(kāi)頭,這一般是為系統(tǒng)保留的,如system.users集合中保存了數(shù)據(jù)庫(kù)的用戶信息,而system.namespace集合中保留了數(shù)據(jù)庫(kù)集合的信息。
3. 不要在集合名里面包含'$'字符。
4. 子集合只是一種較好的集合規(guī)劃方式,如blog.posts和blog.anthurs,實(shí)際上它們和blog集合之間沒(méi)有任何關(guān)系,甚至blog集合可以不存在。
四、數(shù)據(jù)庫(kù):
在同一個(gè)MongoDB服務(wù)器中可以存在多個(gè)數(shù)據(jù)庫(kù),每個(gè)不同的數(shù)據(jù)庫(kù)存儲(chǔ)在不同的文件中。又由于數(shù)據(jù)庫(kù)名和文件名是綁定的,因此數(shù)據(jù)庫(kù)名會(huì)有一些限制。
1. 不能是空字符""。
2. 全部小寫(xiě)且不超過(guò)64字節(jié)。
3. 不得含有文件名命名中的非法字符。
4. admin數(shù)據(jù)庫(kù)是管理數(shù)據(jù)庫(kù),如果某個(gè)用戶位于該數(shù)據(jù)庫(kù)中,他將自動(dòng)繼承所有數(shù)據(jù)庫(kù)權(quán)限。一些特定的服務(wù)器命令也只能從這個(gè)數(shù)據(jù)庫(kù)運(yùn)行。
5. local這個(gè)數(shù)據(jù)庫(kù)永遠(yuǎn)不會(huì)被復(fù)制,只是用于存儲(chǔ)限于本地單臺(tái)服務(wù)器的任意集合。
6. 數(shù)據(jù)庫(kù)名.集合名,表示該集合的完全限定名,其長(zhǎng)度不要超過(guò)121自己。
五:MongoDB的啟動(dòng):
1. 直接執(zhí)行mongod即可,在沒(méi)有任何命令行參數(shù)的情況下,服務(wù)器的主機(jī)中必須包含/data/db目錄,對(duì)于Windows而言,其缺省目錄則為服務(wù)程序所在驅(qū)動(dòng)器的\data\db。如D盤(pán),則為D:\data\bin。缺省監(jiān)聽(tīng)端口為27017。
2. MongoDB自帶了一個(gè)JavaScript Shell,可以從命令行與MongoDB交互。如:mongo。這個(gè)Shell工具可以直接執(zhí)行簡(jiǎn)單的數(shù)學(xué)運(yùn)算。如:
> x = 200
200
> x /5
40
--還可以調(diào)用JavaScript的標(biāo)準(zhǔn)庫(kù)。
> 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 <= 1) return 1
... 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中沒(méi)有條件,則清除集合中的全部數(shù)據(jù)。
> db.blog.remove( { title:"my blog post"})
> db.blog.findOne()
null
六、Shell的使用小技巧:
> show dbs --顯示數(shù)據(jù)庫(kù)名。
> show collections --顯示集合名
> show users --顯示用戶名
> db.help() --列出數(shù)據(jù)庫(kù)的方法。
> db.blog.help() --列出blog集合上的方法。
> db.blog.update --可以直接看update方法的JavaScript實(shí)現(xiàn)代碼。
相關(guān)文章
mongodb replica set 添加刪除節(jié)點(diǎn)的2種方法
replica set多服務(wù)器主從,添加,刪除節(jié)點(diǎn),肯定會(huì)經(jīng)常遇到的。下面詳細(xì)說(shuō)明一下,添加,刪除節(jié)點(diǎn)的2種方法。2014-07-07MongoDB單表數(shù)據(jù)的導(dǎo)出和恢復(fù)實(shí)例講解
MongoDB 是一個(gè)跨平臺(tái)的,面向文檔的數(shù)據(jù)庫(kù),提供高性能,高可用性和可擴(kuò)展性方便。 MongoDB 工作在收集和文件的概念。接下來(lái)通過(guò)本文給大家介紹MongoDB單表數(shù)據(jù)的導(dǎo)出和恢復(fù)實(shí)例講解,對(duì)mongodb導(dǎo)出和恢復(fù)數(shù)據(jù)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-03-03關(guān)于Mongodb 認(rèn)證鑒權(quán)你需要知道的一些事
最近因?yàn)閙ongodb被黑了,早先我就疑惑過(guò)怎么這東西開(kāi)啟服務(wù)就能用了,后來(lái)找了各方資料,知道MongoDB默認(rèn)是沒(méi)有鑒權(quán)的,所以這篇文章主要給大家介紹了關(guān)于Mongodb認(rèn)證鑒權(quán)你需要知道的一些事,需要的朋友可以參考下。2017-10-10MongoDB性能篇之創(chuàng)建索引,組合索引,唯一索引,刪除索引和explain執(zhí)行計(jì)劃
這篇文章主要介紹了MongoDB性能篇之創(chuàng)建索引,組合索引,唯一索引,刪除索引和explain執(zhí)行計(jì)劃的相關(guān)資料,需要的朋友可以參考下2016-02-02MongoDB 簡(jiǎn)單入門(mén)教程(安裝、基本概念、創(chuàng)建用戶)
這篇文章主要介紹了MongoDB 簡(jiǎn)單入門(mén)教程(安裝、基本概念、創(chuàng)建用戶)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MongoDB數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2021-03-03MongoDB查詢之高級(jí)操作詳解(多條件查詢、正則匹配查詢等)
這篇文章主要給大家介紹了關(guān)于MongoDB查詢之高級(jí)操作(多條件查詢、正則匹配查詢等)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10mongodb索引知識(shí)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章給大家介紹了mongodb索引的建立,刪除索引的方法以及唯一索引和組合索引的知識(shí),感興趣的朋友一起看看吧2017-08-08mongodb 修改器($inc/$set/$unset/$push/$pop/upsert)
對(duì)于文檔的更新除替換外,針對(duì)某個(gè)或多個(gè)文檔只需要部分更新可使用原子的更新修改器,能夠高效的進(jìn)行文檔更新。更新修改器是中特殊的鍵2017-04-04