mongodb課程講義二開(kāi)發(fā)基礎(chǔ)_第1頁(yè)
mongodb課程講義二開(kāi)發(fā)基礎(chǔ)_第2頁(yè)
mongodb課程講義二開(kāi)發(fā)基礎(chǔ)_第3頁(yè)
mongodb課程講義二開(kāi)發(fā)基礎(chǔ)_第4頁(yè)
mongodb課程講義二開(kāi)發(fā)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

mongodb課程講義(二)mongodb開(kāi)發(fā)基礎(chǔ)lison老師:3325521094單機(jī)安裝12快速入門3查詢目錄

ONTENTSC4更新5安全6其他命令01MongoDB安裝官網(wǎng)下載安裝介質(zhì):,選擇適當(dāng)?shù)陌姹?,這里以linux版本為例;解壓到系統(tǒng)某路徑,tar-xvzfmongodb-linux-x86_64-rhel70-3.4.10.tgz并在安裝目錄創(chuàng)建data目錄,以及l(fā)ogs目錄和logs/mongodb.log文件使用vim在mongodb的bin目錄創(chuàng)建mongodb的配置文件,如:vimbin/mongodb.conf,mongodb.conf內(nèi)容請(qǐng)見(jiàn)下一頁(yè)課件;編寫shell腳本,命名為start-mongodb.sh,腳本內(nèi)容如下:nohup./mongod-fmongodb.conf&使用start-mongodb.sh啟動(dòng)mongodb實(shí)例,如:./start-mongodb使用mongoClient進(jìn)行測(cè)試,通過(guò)restAPI地址測(cè)試(端口加1000)02配置文件storage:dbPath:"/usr/local/apache/mongoDB/mongodb-linux-x86_64-rhel70-3.4.10/data"systemLog:destination:filepath:"/usr/local/apache//mongoDB/mongodb-linux-x86_64-rhel70-3.4.10/logs/mongodb.log"net:port:27022http:RESTInterfaceEnabled:trueprocessManagement:fork:falsemongoDB配置文件參數(shù)詳解單機(jī)安裝12快速入門3查詢目錄

ONTENTSC4更新5安全6其他命令01數(shù)據(jù)結(jié)構(gòu)介紹{"_id":ObjectId("59f938235d93fc4af8a37114"),"username":“l(fā)ison","country":"in11digo","address":{"aCode":"郵編","add":"d11pff"},"favorites":{"movies":["殺破狼2","1dushe","雷神1"],"cites":["1sh","1cs","1zz"]},"age":18,"salary":NumberDecimal("2.099"),"lenght":1.79}人員信息02需求描述新增2人刪除deletefromuserswhereusername=‘lison’deletefromuserswhereage>8andage<25修改

updateuserssetage=6whereusername=lison'updateuserssetfavorites.moviesadd"小電影2","小電影3"wherefavorites.citeshas"東莞"查詢select*fromuserswherefavorites.citeshas"東莞"、"東京"select*fromuserswhereusernamelike'%s%'and(country=Englishorcountry=USA)03快速入門我們學(xué)習(xí)的目標(biāo)是什么?直觀感受mongoDB的魅力mongo開(kāi)發(fā)入門(原生、spring)開(kāi)發(fā)框架版本選擇mongoDB數(shù)據(jù)類型全解析對(duì)nosql的理念有初步的認(rèn)識(shí)04直觀感受mongoDB?客戶端&

圖形化界面mongoDB自帶的命令客戶端mongomongoDB自帶的圖形化客戶端:CompassCommunity第三方mongoDB的圖形化客戶端:robomongo產(chǎn)品查看、新增和刪除db和collections對(duì)doccument的增刪改查支持構(gòu)建和運(yùn)行腳本查看查詢計(jì)劃管理索引版本支持Compasscommunity支持支持,比較人性化不支持支持支持3.6robomongo支持支持支持不支持支持3.405原生java客戶端<dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>3.5.0</version></dependency>pom文件Tips:3.5.0最新版本加入了對(duì)pojo的支持;3.5.0最新版本增強(qiáng)對(duì)json的支持;mongodb原生客戶端支持兩種document和pojo模式的開(kāi)發(fā);06Spring-data-mongodb客戶端<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-mongodb</artifactId><version>1.10.9.RELEASE</version></dependency>pom文件Tips:spring-data-mongodb的最新版本是2.x.x,如果是spring為5.0版本以上的才推薦使用;spring-data-mongodb的1.10.9版本基于spring4.3.x開(kāi)發(fā),但是默認(rèn)依賴的mongodb驅(qū)動(dòng)為2.14.3,可以將mongodb的驅(qū)動(dòng)設(shè)置為3.5.0的版本,兼容性待進(jìn)一步測(cè)試;spring-data-mongodb的1.10.9可能會(huì)支持3.5.0版本mongodb驅(qū)動(dòng);spring-data-mongodb一般使用pojo的方式開(kāi)發(fā);02需求描述刪除deletefromuserswhereusername=‘lison’db.users.deleteMany({"username":"lison"})deletefromuserswhereage>8andage<25db.users.deleteMany({“$and”:[{“age”:{“$gt”:8}},{“age”:{“$lt”:25}}]})修改

updateuserssetage=6whereusername=lison'db.users.updateMany({"username":"lison"},{"$set":{"age":6}},true)updateuserssetfavorites.moviesadd"小電影2","小電影3"wherefavorites.citeshas"東莞“db.users.updateMany({"favorites.cites":"東莞"},{"$addToSet":{"favorites.movies":{"$each":["小電影2","小電影3"]}}},true)02需求描述查詢select*fromuserswherefavorites.citeshas"東莞"、"東京“db.users.find({"favorites.cites":{"$all":["東莞","東京"]}})select*fromuserswhereusernamelike'%s%'and(country=Englishorcountry=USA)db.users.find({"$and":[{"username":{"$regex":".*s.*"}},{"$or":[{"country":"English"},{"country":"USA"}]}]})07開(kāi)發(fā)框架版本選擇java驅(qū)動(dòng)與mongoDB兼容性08開(kāi)發(fā)框架版本選擇java驅(qū)動(dòng)與jdk的兼容性Tips:java驅(qū)動(dòng)優(yōu)先使用3.5以上版本09開(kāi)發(fā)框架版本選擇springdatamongo與javamongo驅(qū)動(dòng)兼容性springmongodb版本spring版本支持jdk版本支持mongodbserver支持默認(rèn)的mongoDBjava驅(qū)動(dòng)版本SpringDataMongoDB1.x4.3.13.RELEASE以上jdk1.6以上2.6版本以上,3.4以下2.14.3SpringDataMongoDB2.x5.0.2.RELEASE以上jdk1.8以上2.6版本以上,Tips:SpringDataMongoDB1.x與2.x之間區(qū)別比較大,請(qǐng)點(diǎn)擊我想要使用springmongoDB2.x的新API,同時(shí)想使用3.5.0以上版本的java驅(qū)動(dòng)?

spring-data-mongodb的1.10.9版本mongodb3.5spring4.3.13以上10mongoDB數(shù)據(jù)類型數(shù)據(jù)類型示例說(shuō)明null{"key":null}null表示空值或者不存在該字段布爾{"key","true"}

{"key","false"}布爾類型表示真或者假32位整數(shù){"key":8}存儲(chǔ)32位整數(shù),但再shell界面顯示會(huì)被自動(dòng)轉(zhuǎn)成64位浮點(diǎn)數(shù)64位整數(shù){"key":{"floatApprox":8}}存儲(chǔ)64位整數(shù),floatApprox意思是使用64位浮點(diǎn)數(shù)近似表示一個(gè)64位整數(shù)64位浮點(diǎn)數(shù){"key":8.21}存儲(chǔ)64位整數(shù),shell客戶端顯示的數(shù)字都是這種類型;字符串{"key":"value"}

{"key":"8"}UTF-8格式對(duì)象ID{"key":ObjectId()}12字節(jié)的唯一ID日期{"key":newDate()}代碼{"key":function(){}}二進(jìn)制數(shù)據(jù)主要存儲(chǔ)文件未定義{"key":undefined}值沒(méi)有定義,null和undefined是不同的數(shù)組{"key":[16,15,17]}集合或者列表內(nèi)嵌文檔{"user":{"name":"lison"}}子對(duì)象Decimal128{"price":NumberDecimal("2.099")}3.4版本新增的數(shù)據(jù)類型,無(wú)精度問(wèn)題單機(jī)安裝12快速入門3查詢目錄

ONTENTSC4更新6安全7其他命令01查詢概要MongoDB查詢數(shù)據(jù)的語(yǔ)法格式如下:db.collection.find(query,projection)query

:可選,使用查詢操作符指定查詢條件projection

:可選,使用投影操作符指定返回的鍵。查詢時(shí)返回文檔中所有鍵值,只需省略該參數(shù)即可(默認(rèn)省略)。需要以易讀的方式來(lái)讀取數(shù)據(jù),可以使用pretty()方法;02查詢選擇器運(yùn)算符類型運(yùn)算符描述范圍$eq等于$lt小于$gt大于$lte小于等于$gte大于等于$in判斷元素是否在指定的集合范圍里$all判斷數(shù)組中是否包含某幾個(gè)元素,無(wú)關(guān)順序$nin判斷元素是否不在指定的集合范圍里布爾運(yùn)算$ne不等于,不匹配參數(shù)條件$not不匹配結(jié)果$or有一個(gè)條件成立則匹配$nor所有條件都不匹配$and所有條件都必須匹配$exists判斷元素是否存在其他.子文檔匹配$regex正則表達(dá)式匹配03查詢選擇映射字段選擇:db.users.find({},{'username':1})字段排除:db.users.find({},{'username':0})排序sort():db.orders.find().sort({'orderTime':1,'price':1})1:升序-1:降序跳過(guò)和限制skip(n):跳過(guò)n條數(shù)據(jù)limit(n):限制n條數(shù)據(jù)e.g:db.orders.find().sort({'orderTime':-1}).limit(5).skip(5)查詢唯一值distinct():查詢指定字段的唯一值,e.g:db.users.distinct(“age”)04字符串?dāng)?shù)組選擇查詢1.數(shù)組單元素查詢

db.users.find({"favorites.movies":"蜘蛛俠"})

查詢數(shù)組中包含“蜘蛛俠”2.數(shù)組精確查找db.users.find({“favorites.movies”:[“殺破狼2","戰(zhàn)狼","雷神1"]},{"favorites.movies":1})查詢數(shù)組等于[“殺破狼2”,“戰(zhàn)狼”,“雷神1”]的文檔,嚴(yán)格按照順序;3.數(shù)組多元素查詢db.users.find({"favorites.movies":{"$all":["雷神1","戰(zhàn)狼"]}},{"favorites.movies":1})查詢數(shù)組包含[“雷神1”,“戰(zhàn)狼”]的文檔,跟順序無(wú)關(guān)4.索引查詢db.users.find({"favorites.movies.0":"殺破狼2"},{"favorites.movies":1})查詢數(shù)組中第一個(gè)為“殺破狼2”的文檔5.返回?cái)?shù)組子集db.users.find({},{"favorites.movies":{"$slice":[1,2]},"favorites":1})$slice可以取兩個(gè)元素?cái)?shù)組,分別表示跳過(guò)和限制的條數(shù);05對(duì)象數(shù)組選擇查詢1.單元素查詢

db.users.find({"comments":{"author":"lison6","content":"lison評(píng)論6"}})

備注:對(duì)象數(shù)組精確查找2.查找lison1或者lison12評(píng)論過(guò)的user($in查找符)

db.users.find({"comments.author":{"$in":["lison1","lison12"]}}).pretty()備注:跟數(shù)量無(wú)關(guān),跟順序無(wú)關(guān);3.查找lison1和lison12都評(píng)論過(guò)的userdb.users.find({"comments.author":{"$all":["lison12","lison1"]}}).pretty()備注:跟數(shù)量有關(guān),跟順序無(wú)關(guān);4.查找lison5評(píng)語(yǔ)為“l(fā)ison是蒼老師的小迷弟”的user($elemMatch查找符)

db.users.find({"comments":{"$elemMatch":{"author":"lison5","content":"lison是蒼老師的小迷弟"}}}).pretty()備注:數(shù)組中對(duì)象數(shù)據(jù)要符合查詢對(duì)象里面所有的字段,$全元素匹配,和順序無(wú)關(guān);06查詢實(shí)戰(zhàn)演練需求描述查看一個(gè)人的信息,打開(kāi)頁(yè)面只顯示三條評(píng)論點(diǎn)擊評(píng)論的下一頁(yè)按鈕,新加載三條評(píng)論默認(rèn)按照評(píng)論時(shí)間降序解決方案描述新增評(píng)論時(shí),使用$sort運(yùn)算符進(jìn)行排序,插入評(píng)論后,再按照評(píng)論時(shí)間降序排序;查看人員時(shí)加載最新的三條評(píng)論;點(diǎn)擊評(píng)論的下一頁(yè)按鈕,新加載三條評(píng)論如果有多種排序需求怎么處理?07Java客戶端解析原生java驅(qū)動(dòng)MongoClient→MongoDatabase→MongoCollectionMongoClient被設(shè)計(jì)成線程安全、可以被多線程共享的。通常訪問(wèn)數(shù)據(jù)庫(kù)集群的應(yīng)用只需要一個(gè)實(shí)例如果需要使用pojo對(duì)象讀寫,需要將PojoCodecProvider注入到client中查詢和更新的API類查詢器:com.mongodb.client.model.Filters更新器:com.mongodb.client.model.Updates投影器:com.mongodb.client.model.Projections08Springmongodb解析Xml配置文件<!--mongodb連接池配置--><mongo:mongo-clienthost="29"port="27017"><mongo:client-options

write-concern="ACKNOWLEDGED"

connections-per-host="100"

threads-allowed-to-block-for-connection-multiplier="5"

max-wait-time="120000"

connect-timeout="10000"/>

</mongo:mongo-client>><!--mongodb數(shù)據(jù)庫(kù)工廠配置--><mongo:db-factorydbname="lison"mongo-ref="mongo"/><!--mongodb模板配置--><beanid="anotherMongoTemplate"class="org.springframework.data.mongodb.core.MongoTemplate"><constructor-argname="mongoDbFactory"ref="mongoDbFactory"/><propertyname="writeResultChecking"value="EXCEPTION"></property></bean>09Springmongodb解析Springmongodb開(kāi)發(fā)模板模式,基于MongoOperations進(jìn)行操作,基于pojo的操作,配合@document注解開(kāi)發(fā);查詢和更新的API類查詢器:org.springframework.data.mongodb.core.query.Query查詢條件:org.springframework.data.mongodb.core.query.Criteria更新器:org.springframework.data.mongodb.core.query.Update10Mongodb連接池配置參數(shù)名默認(rèn)值說(shuō)明writeConcernACKNOWLEDGED寫入安全機(jī)制,是一種客戶端設(shè)置,用于控制寫入安全的級(jí)別:

ACKNOWLEDGED默認(rèn)選項(xiàng),數(shù)據(jù)寫入到Primary就向客戶端發(fā)送確認(rèn)

0Unacknowledged對(duì)客戶端的寫入不需要發(fā)送任何確認(rèn),適用于性能要求高,但不關(guān)注正確性的場(chǎng)景;

1W1數(shù)據(jù)寫入后,會(huì)等待集群中1臺(tái)發(fā)送確認(rèn)

2W2數(shù)據(jù)寫入后,會(huì)等待集群中兩臺(tái)臺(tái)發(fā)送確認(rèn)

3W3數(shù)據(jù)寫入后,會(huì)等待集群中3臺(tái)臺(tái)發(fā)送確認(rèn)

JOURNALED確保所有數(shù)據(jù)提交到j(luò)ournalfile

MAJORITY等待集群中大多數(shù)服務(wù)器提交后確認(rèn);codecRegistryMongoClient.getDefaultCodecRegistry()編解碼類,實(shí)現(xiàn)Codec接口minConnectionsPerHost最小連接數(shù),connections-per-hostconnectionsPerHost100最大連接數(shù)threadsAllowedToBlockForConnectionMultiplier5此參數(shù)跟connectionsPerHost的乘機(jī)為一個(gè)線程變?yōu)榭捎玫淖畲笞枞麛?shù),超過(guò)此乘機(jī)數(shù)之后的所有線程將及時(shí)獲取一個(gè)異常maxWaitTime1000*60*2一個(gè)線程等待鏈接可用的最大等待毫秒數(shù),0表示不等待maxConnectionIdleTime0設(shè)置池連接的最大空閑時(shí)間,0表示沒(méi)有限制maxConnectionLifeTime0設(shè)置池連接的最大使用時(shí)間,0表示沒(méi)有限制connectTimeout1000*10連接超時(shí)時(shí)間alwaysUseMBeansfalse是否打開(kāi)JMX監(jiān)控11Mongodb連接池配置參數(shù)名默認(rèn)值說(shuō)明heartbeatFrequency10000設(shè)置心跳頻率。這是驅(qū)動(dòng)程序嘗試確定群集中每個(gè)服務(wù)器的當(dāng)前狀態(tài)的頻率。minHeartbeatFrequency500設(shè)置最低心跳頻率。如果驅(qū)動(dòng)程序必須經(jīng)常重新檢查服務(wù)器的可用性,那么至少要等上一次檢查以避免浪費(fèi)。heartbeatConnectTimeout20000心跳檢測(cè)連接超時(shí)時(shí)間heartbeatSocketTimeout20000心跳檢測(cè)Socket超時(shí)時(shí)間12數(shù)據(jù)模式設(shè)計(jì)mongoDBMYSQLUser表字段類型IdNvarcharUsernameNvarchar…………favorites表字段類型IdNvarcharTypeNvarchar…………13nosql在數(shù)據(jù)模式設(shè)計(jì)上的優(yōu)勢(shì)讀寫效率高-在IO性能上有先天獨(dú)厚的優(yōu)勢(shì);可擴(kuò)展能力強(qiáng),不需要考慮關(guān)聯(lián),數(shù)據(jù)分區(qū)分庫(kù),水平擴(kuò)展就比較簡(jiǎn)單;動(dòng)態(tài)模式,不要求每個(gè)文檔都具有完全相同的結(jié)構(gòu)。對(duì)很多異構(gòu)數(shù)據(jù)場(chǎng)景支持非常好;模型自然-文檔模型最接近于我們熟悉的對(duì)象模型;14mongoDB能不能實(shí)現(xiàn)關(guān)聯(lián)查詢?先考慮內(nèi)嵌,直接按照你的對(duì)象模型來(lái)設(shè)計(jì)你的數(shù)據(jù)模型。如果你的對(duì)象模型數(shù)量不多,關(guān)系不是很復(fù)雜,直接一種對(duì)象對(duì)應(yīng)一個(gè)集合就可以了單個(gè)bson文檔最大不能超過(guò)16M;當(dāng)文檔超過(guò)16M的時(shí)候,就應(yīng)該考慮使用引用(DBRef)了,在主表里存儲(chǔ)一個(gè)id值,指向另一個(gè)表中的id值。DBRef語(yǔ)法:{"$ref"

:

<value>,"$id"

:

<value>,"$db"

:

<value>}

$ref:引用文檔所在的集合的名稱;$id:所在集合的_id字段值;$db:可選,集合所在的數(shù)據(jù)庫(kù)實(shí)例;使用dbref腳本示例:varlison=db.users.findOne({"username":"lison"});vardbref=ments;db[dbref.$ref].findOne({"_id":dbref.$id})Tips:DBRef只是關(guān)聯(lián)信息的數(shù)據(jù)載體,本身并不會(huì)去關(guān)聯(lián)數(shù)據(jù);15聚合的理解聚合框架就是定義一個(gè)管道,管道里的每一步都為下一步輸出數(shù)據(jù)數(shù)據(jù)輸入文檔管道操作1管道操作2管道操作3輸入文檔……$project:投影,指定輸出文檔中的字段;$match:用于過(guò)濾數(shù)據(jù),只輸出符合條件的文檔。$match使用MongoDB的標(biāo)準(zhǔn)查詢操作$limit:用來(lái)限制MongoDB聚合管道返回的文檔數(shù)。$skip:在聚合管道中跳過(guò)指定數(shù)量的文檔,并返回余下的文檔。$unwind:將文檔中的某一個(gè)數(shù)組類型字段拆分成多條,每條包含數(shù)組中的一個(gè)值。$group:將集合中的文檔分組,可用于統(tǒng)計(jì)結(jié)果。$sort:將輸入文檔排序后輸出。常用的管道操作16$group操作符$group:可以分組的數(shù)據(jù)執(zhí)行如下的表達(dá)式計(jì)算:$sum:計(jì)算總和。$avg:計(jì)算平均值。$min:根據(jù)分組,獲取集合中所有文檔對(duì)應(yīng)值得最小值。$max:根據(jù)分組,獲取集合中所有文檔對(duì)應(yīng)值得最大值。$push:將指定的表達(dá)式的值添加到一個(gè)數(shù)組中。$addToSet:將表達(dá)式的值添加到一個(gè)集合中(無(wú)重復(fù)值)。

$first:返回每組第一個(gè)文檔,如果有排序,按照排序,如果沒(méi)有按照默認(rèn)的存儲(chǔ)的順序的第一個(gè)文檔。

$last:返回每組最后一個(gè)文檔,如果有排序,按照排序,如果沒(méi)有按照默認(rèn)的存儲(chǔ)的順序的最后個(gè)文檔。17聚合訓(xùn)練查詢2015年4月3號(hào)之前,每個(gè)用戶每個(gè)月消費(fèi)了多少錢,并按用戶名進(jìn)行排序:db.ordersTest.aggregate([{"$match":{"orderTime":{"$lt":newDate("2015-04-03T16:00:00.000Z")}}},{"$group":{"_id":{"useCode":"$useCode","month":{"$month":"$orderTime"}},"total":{"$sum":"$price"}}},{"$sort":{"_id":1}}])orderTest$match$group$sort輸入文檔單機(jī)安裝12快速入門3查詢目錄

ONTENTSC4更新5安全6其他命令01更新操作概要更新的方法替換更新操作符更新update()方法用于更新已存在的文檔。語(yǔ)法格式如下:db.collection.update(<query>,<update>,{upsert:<boolean>,multi:<boolean>,writeConcern:<document>})參數(shù)說(shuō)明:query

:update的查詢條件,類似sqlupdate查詢內(nèi)where后面的;update

:update的對(duì)象和一些更新的操作符(如$,$inc...)等,也可以理解為sqlupdate查詢內(nèi)set后面的upsert

:可選,這個(gè)參數(shù)的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認(rèn)是false,不插入。multi

:可選,mongodb默認(rèn)是false,只更新找到的第一條記錄,如果這個(gè)參數(shù)為true,就把按條件查出來(lái)多條記錄全部更新。writeConcern

:可選,寫安全配置。性能更好原子性操作02更新選擇器類型運(yùn)算符描述操作符$inc指定值加n$set更新指定字段$unset將指定字段刪除$rename更新字段名稱數(shù)組操作符$定位到某一個(gè)元素$push添加值到數(shù)組中$addToSet添加值到數(shù)組中,有重復(fù)則不處理$pop刪除數(shù)組第一個(gè)或者最后一個(gè)$pull從數(shù)組中刪除匹配查詢條件的值$pullAll從數(shù)組中刪除多個(gè)值數(shù)組運(yùn)算修飾符$each與$push和$addToSet等一起使用來(lái)操作多個(gè)值$slice與$push和$each一起使用來(lái)操作用來(lái)縮小更新后數(shù)組的大小$sort與$push、$each和$slice一起使用來(lái)對(duì)數(shù)組進(jìn)行排序隔離運(yùn)算符$isolated隔離其他操作,不允許其他操作交叉更新,不能再分片中使用04新增數(shù)據(jù)拿不到ObjectID?使用insert增加數(shù)據(jù)返回值是什么?varinsert=db.users.insert({"username":"ruolan"})使用upsert屬性,讓update變成insertdb.users.update({"":""},{"username":"leilei"},{"upsert":true})建議:

不要用objectID作為系統(tǒng)中檢索數(shù)據(jù)的條件update中的query加在有索引的字段05更新示例刪除字段示例db.users.updateMany({"username":"lison"},{"$unset":{"country":"","age":""}})更新字段名稱示例db.users.updateMany({"username":"jack"},{"$rename":{"country":"guojia","age":"nianling"}})$each作用示例db.users.updateMany({"username":"jack"},{"$addToSet":{"favorites.movies":{"$each":["小電影2","小電影3"]}}})db.users.updateMany({"username":"jack"},{"$addToSet":{"favorites.movies":["小電影2","小電影3"]}})刪除字符串?dāng)?shù)組中元素示例db.users.updateMany({"username":"jack"},{"$pull":{"favorites.movies":["小電影2","小電影3"]}})db.users.updateMany({"username":"jack"},{"$pullAll":{"favorites.movies":["小電影2","小電影3"]}})06更新示例向?qū)ο髷?shù)組中插入元素給jack老師增加一條評(píng)論($push)db.users.updateOne({"username":"jack"},{"$push":{"comments":{"author":"lison23","content":"ydddyyytttt"}}})給jack老師批量新增兩條評(píng)論($push,$each)db.users.updateOne({"username":"jack"},{"$push":{"comments":{"$each":[{"author":"lison22","content":"yyyytttt"},{"author":"lison23","content":"ydddyyytttt"}]}}})給jack老師批量新增兩條評(píng)論并對(duì)數(shù)組進(jìn)行排序($push,$eachm,$sort)db.users.updateOne({"username":"jack"},{"$push":{"comments":{"$each":[{"author":"lison22","content":"yyyytttt"},{"author":"lison23","content":"ydddyyytttt"}],

$sort:{"author":1}}}})07更新示例刪除對(duì)象數(shù)組中元素示刪除lison1對(duì)jack的所有評(píng)論(批量刪除)db.users.update({"username":"jack"},{"$pull":{"comments":{"author":"lison22"}}})刪除lison5對(duì)lison評(píng)語(yǔ)為“l(fā)ison是蒼老師的小迷弟”的評(píng)論db.users.update({"username":"lison"},{"$pull":{"comments":{"author":"lison5","content":"lison是蒼老師的小迷弟"}}})更新對(duì)象數(shù)組中元素,$符號(hào)示例db.users.updateMany({"username":"jack","comments.author":"lison1"},{"$set":{"comments.$.content":"xxoo","comments.$.author":"lison10"}})含義:精確修改某人某一條精確的評(píng)論,如果有多個(gè)符合條件的數(shù)據(jù),則修改最后一條數(shù)據(jù)。無(wú)法批量修改數(shù)組元素08更新的原子性mongodb的更新都是原子的,mongodb所有的寫操作都是有鎖的。mongoDB2.2之前鎖級(jí)別為實(shí)例級(jí)別,mongoDB2.2以后版本鎖級(jí)別為數(shù)據(jù)庫(kù)級(jí)別,mongoDB3.0中,WiredTiger的鎖級(jí)別是文檔級(jí)別;findAndModify命令:在同一往返過(guò)程中原子更新文檔并返回它;$isolated命令:mongoDB對(duì)寫鎖進(jìn)行了優(yōu)化,對(duì)長(zhǎng)時(shí)間的寫操作會(huì)為其他的讀寫操作讓路,使用$isolated可以避免這種讓路,隔離其他操作,不允許其他操作交叉更新,不能再分片中使用;

例如:db.users.update( {"$isolated”:true},{"username":"lison"},{"$pull":{"comments":{"author":"lison5","content":"lison是蒼老師的小迷弟"}}})09findandModify命令示例常規(guī)的update的方法不能返回更新后的數(shù)據(jù)db.num.update({"_id":ObjectId("5a5b4c285731a2a7cd01c5ae")},{"$inc":{"order":1}})

使用findandModify方法在修改數(shù)據(jù)同時(shí)返回更新前的數(shù)據(jù)或更新后的數(shù)據(jù)db.num.findAndModify({"query":{"_id":ObjectId("5a58cef99506c50abaeb4384")}, "update":{"$inc":{"saleOrder":1}}, "new":true })單機(jī)安裝12快速入門3查詢目錄

ONTENTSC4更新5安全6其他命令01Role-BasedAccessControl基于角色的控制角色類型類型說(shuō)明角色名稱說(shuō)明數(shù)據(jù)庫(kù)一般角色

(DatabaseUserRoles)每個(gè)數(shù)據(jù)庫(kù)都包含的一般角色;read提供讀取所有非系統(tǒng)集合和部分系統(tǒng)集合的數(shù)據(jù)的能力,系統(tǒng)集合包括:system.indexes,system.js和spaces集合。readWrite提供read角色的所有權(quán)限以及修改所有非系統(tǒng)集合和system.js集合上的數(shù)據(jù)的能力。數(shù)據(jù)庫(kù)管理角色

(DatabaseAdministrationRoles)每個(gè)數(shù)據(jù)庫(kù)都包含的數(shù)據(jù)庫(kù)管理角色;dbAdmin提供執(zhí)行管理任務(wù)的能力,如與模式相關(guān)的任務(wù),索引,收集統(tǒng)計(jì)信息。此角色不授予用戶和角色管理的權(quán)限。userAdmin提供在當(dāng)前數(shù)據(jù)庫(kù)上創(chuàng)建和修改角色和用戶的能力。dbOwner提供對(duì)數(shù)據(jù)庫(kù)執(zhí)行任何管理操作的能力。此角色結(jié)合了readWrite,dbAdmin和userAdmin角色授予的權(quán)限。集群管理角色

(ClusterAdministrationRoles)用于管理整個(gè)數(shù)據(jù)庫(kù)集群系統(tǒng)而不是特定數(shù)據(jù)庫(kù)的角色。這些角色包括但不限于副本集和分片群集管理功能。clusterManager在集群上提供管理和監(jiān)視操作。具有此角色的用戶可以分別訪問(wèn)在分片和復(fù)制中使用的config和local數(shù)據(jù)庫(kù)。clusterMonitor為監(jiān)控工具(如MongoDBCloudManager和OpsManager監(jiān)控代理)提供只讀訪問(wèn)權(quán)限。hostManager提供監(jiān)視和管理服務(wù)器的能力。clusterAdmin提供權(quán)限最高的群集管理訪問(wèn)。此角色結(jié)合了由clusterManager,clusterMonitor和hostManager角色授予的權(quán)限。此外,該角色還提供了dropDatabase操作。02Role-BasedAccessControl基于角色的控制角色類型類型說(shuō)明角色名稱說(shuō)明備份和恢復(fù)角色

(BackupandRestorationRoles)用于專門的備份和恢復(fù)的角色backup提供備份數(shù)據(jù)所需的權(quán)限。此角色提供足夠的權(quán)限來(lái)使用MongoDBCloudManager備份代理,OpsManager備份代理或使用mongodump。restore提供使用mongorestore恢復(fù)數(shù)據(jù)所需的權(quán)限全數(shù)據(jù)庫(kù)角色

(All-DatabaseRoles)適用于除mongod實(shí)例中的local和config之外的所有數(shù)據(jù)庫(kù):readAnyDatabase提供與讀取相同的只讀權(quán)限,除了適用于群集中除本地和配置數(shù)據(jù)庫(kù)以外的所有權(quán)限。該角色還提供了整個(gè)集群上的listDatabases操作。readWriteAnyDatabase提供與readWrite相同的讀取和寫入權(quán)限,除了它適用于群集中除本地和配置數(shù)據(jù)庫(kù)以外的所有數(shù)據(jù)。該角色還提供了整個(gè)集群上的listDatabases操作。userAdminAnyDatabase提供與userAdmin相同的用戶管理操作訪問(wèn)權(quán)限,除了適用于群集中除本地?cái)?shù)據(jù)庫(kù)和配置數(shù)據(jù)庫(kù)外的所有數(shù)據(jù)。dbAdminAnyDatabase提供與dbAdmin相同的數(shù)據(jù)庫(kù)管理操作訪問(wèn)權(quán)限,除了它適用于除集群中的本地?cái)?shù)據(jù)庫(kù)和配置數(shù)據(jù)庫(kù)以外的所有數(shù)據(jù)庫(kù)管理操作。該角色還提供了整個(gè)集群上的listDatabases操作。

超級(jí)角色

(SuperuserRoles)所有資源的完整權(quán)限r(nóng)oot提供對(duì)readWriteAnyDatabase,dbAdminAnyDatabase,userAdminAnyDatabase,clusterAdmin,還原和備份相結(jié)合的操作和所有資源的訪問(wèn)。03客戶端授權(quán)shell腳本創(chuàng)建用戶db.createUser({'user':'boss','pwd':'boss','roles':[{'role':'userAdminAnyDatabase','db':'ad

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論