多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > 數(shù)據(jù)庫(kù) > 數(shù)據(jù)庫(kù)應(yīng)用 > [置頂] MongoDB基礎(chǔ)部分及實(shí)現(xiàn)(一)

[置頂] MongoDB基礎(chǔ)部分及實(shí)現(xiàn)(一)

來(lái)源:程序員人生   發(fā)布時(shí)間:2016-11-14 10:25:50 閱讀次數(shù):3385次

MongoDB基礎(chǔ)部份及實(shí)現(xiàn)(1)

 

MongoDB是由C++語(yǔ)言所編寫(xiě)的1種面向文檔的非關(guān)系型數(shù)據(jù)庫(kù)(是1種NoSql數(shù)據(jù)庫(kù)實(shí)現(xiàn)),也是介于關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)之間的數(shù)據(jù)存儲(chǔ)產(chǎn)品,其提供了高性能、高可用、高可拓展及基于散布式存儲(chǔ)的數(shù)據(jù)庫(kù),是非關(guān)系型數(shù)據(jù)庫(kù)中功能最豐富,最類似關(guān)系型數(shù)據(jù)庫(kù)的1種集合、文檔格式的數(shù)據(jù)庫(kù)

 

l   優(yōu)點(diǎn)區(qū)分

l   數(shù)據(jù)模型

l   數(shù)據(jù)操作

l   語(yǔ)言拓展

 

1、優(yōu)點(diǎn)區(qū)分

A、數(shù)據(jù)存儲(chǔ)格式不同,MongoDB采取文檔情勢(shì)存儲(chǔ)數(shù)據(jù)(JSON),而RDBMS則是數(shù)據(jù)表格式;

B、采取鍵-值對(duì)情勢(shì)存儲(chǔ)數(shù)據(jù),性能高于RDBMS的表檢索性能;

C、不存在復(fù)雜的數(shù)據(jù)結(jié)構(gòu)連接操作;

D、易于拓展范圍化;

E、不需要RDBMS數(shù)據(jù)庫(kù)對(duì)象的利用程序轉(zhuǎn)換和映照;

F、對(duì)任何屬性內(nèi)容可索引;

G、復(fù)制、自動(dòng)分片及快速更新數(shù)據(jù)的能力;

 

1般情況,我們會(huì)在企業(yè)大數(shù)據(jù)情形或是數(shù)據(jù)庫(kù)數(shù)據(jù)量很大時(shí)候,使用MongoDB數(shù)據(jù)庫(kù)存儲(chǔ),利用其本身的數(shù)據(jù)存儲(chǔ)優(yōu)勢(shì),來(lái)提高數(shù)據(jù)存儲(chǔ)的性能、拓展及高可用。

 

2、數(shù)據(jù)模型

在這里,我們以帖子、帖子評(píng)論及帖子標(biāo)簽為例來(lái)講明在RDBMS和MongoDB的區(qū)分,目的只為說(shuō)明后者的方便性,不需要復(fù)雜的關(guān)聯(lián)關(guān)系。

對(duì)關(guān)系型數(shù)據(jù)庫(kù),若實(shí)現(xiàn)上面的例子,最少需要3張數(shù)據(jù)表才可以實(shí)現(xiàn)該需求,具體的數(shù)據(jù)表ER圖以下:

 

而使用MongoDB實(shí)現(xiàn)就比較簡(jiǎn)單,只需要將comment和tag_list嵌入post便可,不需要?jiǎng)?chuàng)建多個(gè)文檔,僅僅1個(gè)post文檔便可描寫(xiě)清楚,具體以下鍵值對(duì)格式數(shù)據(jù):

 

{

   _id: POST_ID

   title: TITLE_OF_POST,

   desc: POST_DESCRIPTION,

   by: POST_BY,

   url: URL_OF_POST,

   tags:[TAG1, TAG2, TAG3],

   likes: TOTAL_LIKES,

   comments:[   

      {

         user:'COMMENT_BY',

         content: TEXT,

         time: DATE_TIME,

         like: LIKES

      },

      {

         user:'COMMENT_BY',

         content: TEXT,

         time: DATE_TIME,

         like: LIKES

      }

   ]

}

 

3、數(shù)據(jù)操作

1、數(shù)據(jù)庫(kù)操作

A、創(chuàng)建數(shù)據(jù)庫(kù)

> use mydb

switched to db mydb

 

B、查詢當(dāng)前數(shù)據(jù)庫(kù)

> db

mydb

 

C、查看數(shù)據(jù)庫(kù)列表

> show dbs

local    0.000GB

test     0.000GB

 

由于新建的數(shù)據(jù)庫(kù)mydb中沒(méi)有數(shù)據(jù),默許是不顯示的,所以我們插入1個(gè)文件:

> db.movie.insert({"name":"cloud waterteam using!"})

WriteResult({"nInserted" : 1 })

再次使用show dbs,便可看到新建數(shù)據(jù)庫(kù)

> show dbs

local    0.000GB

mydb     0.000GB

test     0.000GB

 

D、刪除數(shù)據(jù)庫(kù)

> db.dropDatabase()

{ "dropped" :"mydb", "ok" : 1 }

查看以下表,看是不是刪除:

> show dbs

local    0.000GB

test     0.000GB

 

2、CURD操作

在MongoDB中,數(shù)據(jù)的CURD操作是針對(duì)集合而言,也就是文檔的增、刪、改及查詢操作是在所屬集合中進(jìn)行,具體以下:

A、新建集合

> db.createCollection("mycollection")

{ "ok" : 1 }

新建以后,查詢下是不是創(chuàng)建完成:

> show collections

mycollection

 

注意:

在MongoDB中,可以不顯示的創(chuàng)建集合,由于系統(tǒng)會(huì)自動(dòng)創(chuàng)建集合,比如:當(dāng)我們使用db.COLLECTION_NAME.insert({…})時(shí)會(huì)自動(dòng)新建或是打開(kāi)存在的集合,另外,我們也能夠在創(chuàng)建集合的同時(shí)插入文檔到改集合,格式語(yǔ)法以下:

db.cteateCollection(“COLLECTION_NAME”,{…})

 

B、刪除集合

> db.mycollection.drop()

true

 

查詢是不是刪除集合成功:

> show collections

 

C、插入文檔

> db.post.insert([{title:'MongoDB 000',desc:'MongoDBis one of  nosqldatabase',by:'cwteam',url:'www.baidu.com',tags:['mongodb','nosql','database'],likes:10000},{title:'MongoDB001',desc:'Nosql db has no tables,younknow?',by:'cwteam',url:'www.baidu.com',tags:['mongodb','nosql','database'],likes:20000,comments:[{user:'cwteam',content:'thefirst comment',time:new Date(2016,09,19,18,10),like:0}]}])

BulkWriteResult({

     "writeErrors": [ ],

     "writeConcernErrors": [ ],

     "nInserted": 2,

     "nUpserted": 0,

     "nMatched": 0,

     "nModified": 0,

     "nRemoved": 0,

     "upserted": [ ]

})

新建了1個(gè)post集合,并插入兩條記錄(評(píng)論及標(biāo)簽)。

 

D、查詢文檔

非格式化查詢:

> db.post.find()

{ "_id" :ObjectId("57dfb9a633c51cdbe23b798a"), "title" :"MongoDB 000", "desc" : "MongoDB is one of  nosql database", "by" :"cwteam", "url" : "www.baidu.com","tags" : [ "mongodb", "nosql", "database"], "likes" : 10000 }

{ "_id" :ObjectId("57dfb9a633c51cdbe23b798b"), "title" :"MongoDB 001", "desc" : "Nosql db has no tables,younknow?", "by" : "cwteam", "url" :"www.baidu.com", "tags" : [ "mongodb","nosql", "database" ], "likes" : 20000, "comments": [ { "user" : "cwteam", "content" : "thefirst comment", "time" :ISODate("2016⑴0⑴9T10:10:00Z"), "like" : 0 } ] }

 

格式化查詢:

> db.post.find().pretty()

{

     "_id": ObjectId("57dfb9a633c51cdbe23b798a"),

     "title": "MongoDB 000",

     "desc": "MongoDB is one of  nosqldatabase",

     "by": "cwteam",

     "url": "www.baidu.com",

     "tags": [

         "mongodb",

         "nosql",

         "database"

     ],

     "likes": 10000

}

{

     "_id": ObjectId("57dfb9a633c51cdbe23b798b"),

     "title": "MongoDB 001",

     "desc": "Nosql db has no tables,youn know?",

     "by": "cwteam",

     "url": "www.baidu.com",

     "tags": [

         "mongodb",

         "nosql",

         "database"

     ],

     "likes": 20000,

     "comments": [

         {

              "user": "cwteam",

              "content": "the first comment",

              "time": ISODate("2016⑴0⑴9T10:10:00Z"),

              "like": 0

         }

     ]

}

 

E、修改文檔

 

更新現(xiàn)有文檔:

>db.post.update({'_id':ObjectId("57dfb9a633c51cdbe23b798b")},{$set:{'url':'www.cwteam.com'}})

查看下更新的結(jié)果:

{

     "_id": ObjectId("57dfb9a633c51cdbe23b798b"),

     "title": "MongoDB 001",

     "desc": "Nosql db has no tables,youn know?",

     "by": "cwteam",

     "url": "www.cwteam.com",

     "tags": [

         "mongodb",

         "nosql",

         "database"

     ],

     "likes": 20000,

     "comments": [

         {

              "user": "cwteam",

              "content": "the first comment",

              "time": ISODate("2016⑴0⑴9T10:10:00Z"),

              "like": 0

         }

     ]

}

 

注意:

如果要修改多個(gè)文檔,可以這樣操作:

>db.post.update({'_id':ObjectId("57dfb9a633c51cdbe23b798b")},{$set:{'url':'www.cwteam.com'},{multi:true})

 

 

 

替換現(xiàn)有文檔:

>db.post.save({'_id':ObjectId("57dfb9a633c51cdbe23b798a"),'title':'hellowmongodb','by':'cwteam'})

WriteResult({"nMatched" : 1, "nUpserted" : 0, "nModified" : 1})

查看下替換的結(jié)果:

{

     "_id": ObjectId("57dfb9a633c51cdbe23b798a"),

     "title": "hellow mongodb",

     "by": "cwteam"

}

 

F、刪除文檔

刪除1個(gè)文檔(1限定刪除第1個(gè)文檔):

> db.post.remove({},1)

WriteResult({"nRemoved" : 1 })

如果要隨便刪除任何1個(gè)文檔,只需要下面操作:

> db.post.remove({"_id":ObjectId("57dfb9a633c51cdbe23b798a")})

 

刪除所有文檔:

> db.post.remove({})

WriteResult({ "nRemoved" : 1 })

 

3、備份還原

備份操作:

sudo ./mongodump -h 127.0.0.1:27017 -d mydb -o../data/backup

 

還原操作:

sudo ./mongorestore -h127.0.0.1:27017 -d mydb -dir ../data/backup/mydb

 

 

4、語(yǔ)言拓展

語(yǔ)言拓展指的是如何將MongoDB與開(kāi)發(fā)語(yǔ)言結(jié)合,實(shí)現(xiàn)彼此的順利通訊交互,實(shí)際上就是調(diào)用相干的對(duì)外api來(lái)訪問(wèn)和操作MongoDB,下面就以在PHP和Java中如何使用其進(jìn)行說(shuō)明。

1、在PHP的使用

在PHP中使用MongoDB數(shù)據(jù)庫(kù),我們必須為其添加MongoDB驅(qū)動(dòng)拓展,并在php.ini文件中將該拓展嵌入到PHP環(huán)境中,以下所示:

extension=php_mongo.so/.dll(后綴類型根據(jù)系統(tǒng)環(huán)境而不同,linux/unix/mac 為.so,而windows則為.dll)。

A、下載及安裝

這里我們通過(guò)pecl軟件集工具在線安裝mongo驅(qū)動(dòng),具體以下:

$sudo pecl install mongo

 

B、拓展及配置

我們將上面安裝以后生成的mongo.so文件路徑添加到php.ini中,以下:

extension=mongo.so

 

注意:

更新php.ini配置文件后,必須重啟web服務(wù)才能生效修改的配置信息。

 

C、驗(yàn)證及使用

首先,我們驗(yàn)證下mongodb驅(qū)動(dòng)是不是添加完成:

<?php
phpinfo();

?>

 

結(jié)果以下顯示,則說(shuō)明添加完成:

 

其次,這里演示下對(duì)其的增、查操作:

連接并選擇數(shù)據(jù)庫(kù)

// 連接到數(shù)據(jù)庫(kù) $m = new MongoClient("test.mongodb.com:27017"); // 選擇1數(shù)據(jù)庫(kù) $db = $m->mydb;

選擇1個(gè)集合:

// 連接到數(shù)據(jù)庫(kù) $m = new MongoClient(); // 選擇1數(shù)據(jù)庫(kù) $db = $m->mydb;

插入1個(gè)文檔,并在命令行模式下查看結(jié)果:

// 插入1個(gè)文檔 $document = array(     "title" => "MongoDB",     "desc" => "database",     "likes" => 100000,     "url" => "http://www.cwteam.com",     "by" => "cwteam.com" ); $collections->insert($document);

結(jié)果顯示:

 

查詢指定集合所有文檔,并在閱讀器查看結(jié)果:

// 查詢所有文檔 $cursors = $collections->find(); foreach($cursors as $document) {     echo 'title:'.$document["title"].'</br>';     echo 'desc:'.$document['desc'].'</br>';     echo 'likes:'.$document['likes'].'</br>';     echo 'url:'.$document['url'].'</br>';     echo 'by:'.$document['by'].'</br>'; }

結(jié)果顯示:

    

 

好了,經(jīng)過(guò)以上的進(jìn)程,我們已成功完成在php中使用mongodb的介紹,由于mongodb在php中的使用與命令行模式相同,這里不再介紹。

 

2、在Java的使用

在Java環(huán)境中使用Mongodb數(shù)據(jù)庫(kù),我們需要為其classpath添加mongo.jar文件。這里我們一樣以PHP的例子為例說(shuō)明,我們新建1個(gè)java項(xiàng)目,并使用mongo.jar提供的api來(lái)操作mongo.jar,具體以下:

A、下載軟件包

官網(wǎng)地址:

https://docs.mongodb.com/ecosystem/drivers/java/

 

 

B、驗(yàn)證及使用

這里使用的版本為mongo-java-driver⑵.10.1.jar,我們只需要將其導(dǎo)入到j(luò)ava項(xiàng)目便可使用,具體以下:

連接并選擇1個(gè)數(shù)據(jù)庫(kù)

// 連接并選擇數(shù)據(jù)庫(kù)

               MongoClientmogoClient = new MongoClient("test.mongodb.com",27017);

               DB mydb = mogoClient.getDB("mydb");

 

取得1個(gè)集合:

// 獲得1個(gè)集合

               DBCollection collecs = mydb.getCollection("post");

 

插入1個(gè)文檔,并在命令行模式下查看結(jié)果:

// 插入1個(gè)文檔

               BasicDBObjectdoc = new BasicDBObject();

               doc.append("title", "MongoDB-Java");

               doc.append("desc", "database");

               doc.append("likes", 300000);

               doc.append("url", "test.mongodb.com");

               doc.append("by", "cwteam.com");

               collecs.insert(doc);

結(jié)果顯示:

 

查詢所有文檔,并在輸出查看日志打印結(jié)果:

// 查找所有文檔

               DBCursordbCursor = collecs.find();

               List<DBObject>objs = dbCursor.toArray();

               for(DBObject dobj : objs) {

                     log(dobj.toString());

               }

結(jié)果顯示:

 

 

 

 

 

 

好了,Mongodb基礎(chǔ)部份就介紹到這里,由于作者水平有限,如有問(wèn)題請(qǐng)?jiān)谠u(píng)論發(fā)言討論,謝謝。

 

 

 

 

技術(shù)討論群:

276592700(新)

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 五月视频 | 欧美国产亚洲精品高清不卡 | 欧美高清视频手机在在线 | 色www永久免费| 男人懂的网站 | 色吊丝中文字幕 | 欧美国产综合日韩一区二区 | 樱花aⅴ一区二区三区四区 影视精品网站入口 | 另类小说图片 | 国产在线拍揄自揄视精品不卡 | 日本福利片秋霞国产午夜 | 伊人精品成人久久综合欧美 | 欧美永久免费 | 国产亚洲精品福利片 | 韩国全部三级伦在线 | 欧美大尺寸 | 国产日韩欧美高清 | 亚洲高清视频在线播放 | 日韩欧美在线综合 | 国产美女无遮挡免费视频网站 | 亚洲精品日韩一区二区 | 免费国产一区二区在免费观看 | 日本一区二区网站 | 日韩手机视频 | 亚洲成在线观看 | 亚洲国产精品一区二区首页 | 国产啊v在线观看 | 欧美亚洲综合另类成人 | 国内精品视频免费观看 | 性色网 | 日韩欧美一区二区久久 | 久久精品一区二区三区不卡 | 琪琪在线影院 | 一区二区三区四区在线观看视频 | 欧美一级在线观看视频 | 最新亚洲精品国自产在线观看 | 能免费看的黄色网址 | 亚洲精品影院 | 国产一级做性视频 | 日韩欧美在线观看视频 | 欧美福利精品 |