久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Ubuntu下MongoDB的安裝和使用

 根的情義 2018-06-18

本博文介紹了MongoDB,,并詳細(xì)指引讀者在Ubuntu下MongoDB的安裝和使用。本教程在Ubuntu14.04下測(cè)試通過,。

一,、MongoDB介紹

MongoDB 是一個(gè)是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間,,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,,是類似json的bson格式,,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引,。

二,、安裝MongoDB

MongoDB安裝很簡單,無需下載源文件,,可以直接用apt-get命令進(jìn)行安裝,。
打開終端,輸入以下命令:

sudo apt-get install mongodb
  • 1

截圖如下:
安裝mongodb
安裝完成后,,在終端輸入以下命令查看MongoDB版本:

mongo -version
  • 1

輸出版本信息,,表明安裝成功,截圖如下:
查看mongo版本
啟動(dòng)和關(guān)閉mongodb命令如下:

service mongodb start service mongodb stop
  • 1
  • 2

截圖如下:
啟動(dòng)關(guān)閉
默認(rèn)設(shè)置MongoDB是隨Ubuntu啟動(dòng)自動(dòng)啟動(dòng)的,。
輸入以下命令查看是否啟動(dòng)成功:

pgrep mongo -l #注意:-l是英文字母l,,不是阿拉伯?dāng)?shù)字1
  • 1

截圖如下:
查看是否啟動(dòng)成功
卸載MongoDB

sudo apt-get --purge remove mongodb mongodb-clients mongodb-server
  • 1

三、使用MongoDB

shell命令模式

輸入mongo進(jìn)入shell命令模式,,默認(rèn)連接的數(shù)據(jù)庫是test數(shù)據(jù)庫,,在此之前一定要確保你已經(jīng)啟動(dòng)了MongoDB,否則會(huì)出現(xiàn)錯(cuò)誤,,啟動(dòng)之后運(yùn)行成功,,如下截圖:
mongo shell

常用操作命令:

數(shù)據(jù)庫相關(guān)
show dbs:顯示數(shù)據(jù)庫列表
show collections:顯示當(dāng)前數(shù)據(jù)庫中的集合(類似關(guān)系數(shù)據(jù)庫中的表table)
show users:顯示所有用戶
use yourDB:切換當(dāng)前數(shù)據(jù)庫至yourDB
db.help() :顯示數(shù)據(jù)庫操作命令
db.yourCollection.help() :顯示集合操作命令,yourCollection是集合名
MongoDB沒有創(chuàng)建數(shù)據(jù)庫的命令,,如果你想創(chuàng)建一個(gè)“School”的數(shù)據(jù)庫,,先運(yùn)行use School命令,之后做一些操作(如:創(chuàng)建聚集集合db.createCollection('teacher')),這樣就可以創(chuàng)建一個(gè)名叫“School”的數(shù)據(jù)庫,。截圖如下:
自動(dòng)創(chuàng)建school數(shù)據(jù)庫
下面以一個(gè)School數(shù)據(jù)庫為例,,在School數(shù)據(jù)庫中創(chuàng)建兩個(gè)集合teacher和student,并對(duì)student集合中的數(shù)據(jù)進(jìn)行增刪改查基本操作(集合Collection相當(dāng)于關(guān)系型數(shù)據(jù)庫中的表table),。
1,、切換到School數(shù)據(jù)庫

use School #切換到School數(shù)據(jù)庫。MongoDB 無需預(yù)創(chuàng)建School數(shù)據(jù)庫,,在使用時(shí)會(huì)自動(dòng)創(chuàng)建
  • 1

2,、創(chuàng)建Collection

db.createCollection('teacher') #創(chuàng)建一個(gè)聚集集合。MongoDB 其實(shí)在插入數(shù)據(jù)的時(shí)候,,也會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的集合,,無需預(yù)定義集合
  • 1

截圖如下:
創(chuàng)建集合
3、插入數(shù)據(jù)
與數(shù)據(jù)庫創(chuàng)建類似,,插入數(shù)據(jù)時(shí)也會(huì)自動(dòng)創(chuàng)建集合,。
插入數(shù)據(jù)有兩種方式:insert和save。

db.student.insert({_id:1, sname: 'zhangsan', sage: 20}) #_id可選 db.student.save({_id:1, sname: 'zhangsan', sage: 22}) #_id可選
  • 1
  • 2

這兩種方式,,其插入的數(shù)據(jù)中_id字段均可不寫,,會(huì)自動(dòng)生成一個(gè)唯一的_id來標(biāo)識(shí)本條數(shù)據(jù)。而insert和save不同之處在于:在手動(dòng)插入_id字段時(shí),,如果_id已經(jīng)存在,,insert不做操作,save做更新操作,;如果不加_id字段,,兩者作用相同都是插入數(shù)據(jù)。截圖如下:
insertsave
添加的數(shù)據(jù)其結(jié)構(gòu)是松散的,,只要是bson格式均可,,列屬性均不固定,根據(jù)添加的數(shù)據(jù)為準(zhǔn),。先定義數(shù)據(jù)再插入,,就可以一次性插入多條數(shù)據(jù),截圖如下:
插入多條
運(yùn)行完以上例子,,student 已自動(dòng)創(chuàng)建,,這也說明 MongoDB 不需要預(yù)先定義 collection ,在第一次插入數(shù)據(jù)后,,collection 會(huì)自動(dòng)的創(chuàng)建,。截圖如下:
student自動(dòng)創(chuàng)建
3、查找數(shù)據(jù)
db.youCollection.find(criteria, filterDisplay)
criteria :查詢條件,,可選
filterDisplay:篩選顯示部分?jǐn)?shù)據(jù),,如顯示指定列數(shù)據(jù),可選(當(dāng)選擇時(shí),,第一個(gè)參數(shù)不可省略,,若查詢條件為空,,可用{}做占位符,如下例第三句)

db.student.find() #查詢所有記錄,。相當(dāng)于:select * from student db.student.find({sname: 'lisi'}) #查詢sname='lisi'的記錄,。相當(dāng)于: select * from student where sname='lisi' db.student.find({},{sname:1, sage:1}) #查詢指定列sname、sage數(shù)據(jù),。相當(dāng)于:select sname,sage from student,。sname:1表示返回sname列,默認(rèn)_id字段也是返回的,,可以添加_id:0(意為不返回_id)寫成{sname: 1, sage: 1,_id:0},,就不會(huì)返回默認(rèn)的_id字段了 db.student.find({sname: 'zhangsan', sage: 22}) #and 與條件查詢。相當(dāng)于:select * from student where sname = 'zhangsan' and sage = 22 db.student.find({$or: [{sage: 22}, {sage: 25}]}) #or 條件查詢,。相當(dāng)于:select * from student where sage = 22 or sage = 25
  • 1
  • 2
  • 3
  • 4
  • 5

查詢操作類似,,這里只給出db.student.find({sname: 'lisi'})查詢的截圖,如下:
查找

4,、修改數(shù)據(jù)
db.youCollection.update(criteria, objNew, upsert, multi )
criteria: update的查詢條件,,類似sql update查詢內(nèi)where后面的
objNew : update的對(duì)象和一些更新的操作符(如$set)等,也可以理解為sql update查詢內(nèi)set后面的,。
upsert : 如果不存在update的記錄,,是否插入objNew,true為插入,,默認(rèn)是false,,不插入。
multi: mongodb默認(rèn)是false,只更新找到的第一條記錄,,如果這個(gè)參數(shù)為true,就把按條件查出來多條記錄全部更新,。默認(rèn)false,只修改匹配到的第一條數(shù)據(jù),。
其中criteria和objNew是必選參數(shù),,upsert和multi可選參數(shù)
舉例如下:

db.student.update({sname: 'lisi'}, {$set: {sage: 30}}, false, true) #相當(dāng)于:update student set sage =30 where sname = 'lisi';
  • 1

操作截圖如下:
修改
5、刪除數(shù)據(jù)

db.student.remove({sname: 'chenliu'}) #相當(dāng)于:delete from student where sname='chenliu'
  • 1

操作截圖如下:
刪除
6,、退出shell命令模式
輸入exit或者Ctrl C退出shell命令模式

注意:MongoDB相較安全性更偏向易用性,,默認(rèn)是沒有開啟用戶權(quán)限的,如果想開啟用戶權(quán)限,,可以參考Ubuntu下開啟MongoDB用戶權(quán)限,。

Java API編程實(shí)例

第一步:下載Java MongoDB Driver驅(qū)動(dòng)jar包,Java MongoDB Driver下載地址,,默認(rèn)的下載目錄為~/下載或者~/Downloads
第二步:打開Eclipse,,新建Java Project,新建Class,,引入剛剛下載的jar包
第三步:編碼實(shí)現(xiàn)
下面是源代碼:

import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; public class TestMongoDB { /** * @param args */ public static void main(String[] args) { insert();//插入數(shù)據(jù),。執(zhí)行插入時(shí),,可將其他三句函數(shù)調(diào)用語句注釋掉,下同 // find(); //查找數(shù)據(jù) // update();//更新數(shù)據(jù) // delete();//刪除數(shù)據(jù) } /** * 返回指定數(shù)據(jù)庫中的指定集合 * @param dbname 數(shù)據(jù)庫名 * @param collectionname 集合名 * @return */ //MongoDB無需預(yù)定義數(shù)據(jù)庫和集合,在使用的時(shí)候會(huì)自動(dòng)創(chuàng)建 public static MongoCollection<Document> getCollection(String dbname,String collectionname){ //實(shí)例化一個(gè)mongo客戶端,服務(wù)器地址:localhost(本地),,端口號(hào):27017 MongoClient mongoClient=new MongoClient('localhost',27017); //實(shí)例化一個(gè)mongo數(shù)據(jù)庫 MongoDatabase mongoDatabase = mongoClient.getDatabase(dbname); //獲取數(shù)據(jù)庫中某個(gè)集合 MongoCollection<Document> collection = mongoDatabase.getCollection(collectionname); return collection; } /** * 插入數(shù)據(jù) */ public static void insert(){ try{ //連接MongoDB,,指定連接數(shù)據(jù)庫名,指定連接表名,。 MongoCollection<Document> collection= getCollection('test','student'); //實(shí)例化一個(gè)文檔,文檔內(nèi)容為{sname:'Mary',sage:25},如果還有其他字段,,可以繼續(xù)追加append Document doc1=new Document('sname','Mary').append('sage', 25); //實(shí)例化一個(gè)文檔,文檔內(nèi)容為{sname:'Bob',sage:20} Document doc2=new Document('sname','Bob').append('sage', 20); List<Document> documents = new ArrayList<Document>(); //將doc1,、doc2加入到documents列表中 documents.add(doc1); documents.add(doc2); //將documents插入集合 collection.insertMany(documents); System.out.println('插入成功'); }catch(Exception e){ System.err.println( e.getClass().getName() ': ' e.getMessage() ); } } /** * 查詢數(shù)據(jù) */ public static void find(){ try{ MongoCollection<Document> collection = getCollection('test','student'); //通過游標(biāo)遍歷檢索出的文檔集合 // MongoCursor<Document> cursor= collection.find(new Document('sname','Mary')). projection(new Document('sname',1).append('sage',1).append('_id', 0)).iterator(); //find查詢條件:sname='Mary'。projection篩選:顯示sname和sage,不顯示_id(_id默認(rèn)會(huì)顯示) //查詢所有數(shù)據(jù) MongoCursor<Document> cursor= collection.find().iterator(); while(cursor.hasNext()){ System.out.println(cursor.next().toJson()); } }catch(Exception e){ System.err.println( e.getClass().getName() ': ' e.getMessage() ); } } /** * 更新數(shù)據(jù) */ public static void update(){ try{ MongoCollection<Document> collection = getCollection('test','student'); //更新文檔 將文檔中sname='Mary'的文檔修改為sage=22 collection.updateMany(Filters.eq('sname', 'Mary'), new Document('$set',new Document('sage',22))); System.out.println('更新成功,!'); }catch(Exception e){ System.err.println( e.getClass().getName() ': ' e.getMessage() ); } } /** * 刪除數(shù)據(jù) */ public static void delete(){ try{ MongoCollection<Document> collection = getCollection('test','student'); //刪除符合條件的第一個(gè)文檔 collection.deleteOne(Filters.eq('sname', 'Bob')); //刪除所有符合條件的文檔 //collection.deleteMany (Filters.eq('sname', 'Bob')); System.out.println('刪除成功,!'); }catch(Exception e){ System.err.println( e.getClass().getName() ': ' e.getMessage() ); } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105

每次執(zhí)行完程序,都可以返回shell模式查看結(jié)果,。如:在eclipse執(zhí)行完更新操作后,,在shell模式輸入db.student.find(),可以查看student集合的所有數(shù)據(jù),,截圖如下:
更新

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多