日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

MongoDB基礎部份及實現(xiàn)(1)

 

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

 

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

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

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

l   語言拓展

 

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

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

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

C、不存在復雜的數(shù)據(jù)結構連接操作;

D、易于拓展范圍化;

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

F、對任何屬性內容可索引;

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

 

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

 

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

在這里,我們以帖子、帖子評論及帖子標簽為例來講明在RDBMS和MongoDB的區(qū)分,目的只為說明后者的方便性,不需要復雜的關聯(lián)關系。

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

 

而使用MongoDB實現(xiàn)就比較簡單,只需要將comment和tag_list嵌入post便可,不需要創(chuàng)建多個文檔,僅僅1個post文檔便可描寫清楚,具體以下鍵值對格式數(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ù)庫操作

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

> use mydb

switched to db mydb

 

B、查詢當前數(shù)據(jù)庫

> db

mydb

 

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

> show dbs

local    0.000GB

test     0.000GB

 

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

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

WriteResult({"nInserted" : 1 })

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

> show dbs

local    0.000GB

mydb     0.000GB

test     0.000GB

 

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

> db.dropDatabase()

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

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

> show dbs

local    0.000GB

test     0.000GB

 

2、CURD操作

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

A、新建集合

> db.createCollection("mycollection")

{ "ok" : 1 }

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

> show collections

mycollection

 

注意:

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

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個post集合,并插入兩條記錄(評論及標簽)。

 

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'}})

查看下更新的結果:

{

     "_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

         }

     ]

}

 

注意:

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

>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})

查看下替換的結果:

{

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

     "title": "hellow mongodb",

     "by": "cwteam"

}

 

F、刪除文檔

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

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

WriteResult({"nRemoved" : 1 })

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

> 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、語言拓展

語言拓展指的是如何將MongoDB與開發(fā)語言結合,實現(xiàn)彼此的順利通訊交互,實際上就是調用相干的對外api來訪問和操作MongoDB,下面就以在PHP和Java中如何使用其進行說明。

1、在PHP的使用

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

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

A、下載及安裝

這里我們通過pecl軟件集工具在線安裝mongo驅動,具體以下:

$sudo pecl install mongo

 

B、拓展及配置

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

extension=mongo.so

 

注意:

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

 

C、驗證及使用

首先,我們驗證下mongodb驅動是不是添加完成:

<?php
phpinfo();

?>

 

結果以下顯示,則說明添加完成:

 

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

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

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

選擇1個集合:

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

插入1個文檔,并在命令行模式下查看結果:

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

結果顯示:

 

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

// 查詢所有文檔 $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>'; }

結果顯示:

    

 

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

 

2、在Java的使用

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

A、下載軟件包

官網地址:

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

 

 

B、驗證及使用

這里使用的版本為mongo-java-driver⑵.10.1.jar,我們只需要將其導入到java項目便可使用,具體以下:

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

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

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

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

 

取得1個集合:

// 獲得1個集合

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

 

插入1個文檔,并在命令行模式下查看結果:

// 插入1個文檔

               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);

結果顯示:

 

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

// 查找所有文檔

               DBCursordbCursor = collecs.find();

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

               for(DBObject dobj : objs) {

                     log(dobj.toString());

               }

結果顯示:

 

 

 

 

 

 

好了,Mongodb基礎部份就介紹到這里,由于作者水平有限,如有問題請在評論發(fā)言討論,謝謝。

 

 

 

 

技術討論群:

276592700(新)

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产做爰免费视频观看 | 日韩欧美一区二区三区久久婷婷 | 国产乱码一区二区三区 | 国产日韩精品视频一区二区三区 | 国产欧美久久一区二区三区 | 国产一区二区大片在线观看 | 国产午夜激情视频 | 男人午夜影院 | 一本一本久久a久久精品综合小说 | 欧美精品一区二 | 一区二区高清在线 | 九九热免费在线视频 | 国产精品久久久久久久久久 | 国产精品视频1区 | www.成人在线视频 | 九九热免费看 | 欧美日韩国 | 三级毛片视频网站 | 黄色av免费在线观看 | 久久久网站 | 一区二区三区欧美日韩 | 成人小视频在线 | 亚洲国产视频一区 | 一级毛片在线观看网站 | 精品伦精品一区二区三区视频 | 亚洲精品美女视频 | 欧美精品一级片 | 三级毛片视频 | cao久久 | 久久久久久国产精品 | 国产精品亚洲第一 | 色婷婷色综合 | 夜夜骑视频 | 成人在线视频一区 | 欧美一区二区三区 | 久久网站免费观看 | 免费黄色网页 | 717影视三级理论电影在线 | 国产精品永久 | 国内精品久久久久久 | 中国一级特黄真人毛片免费观看 |