MongoDB的安装与使用
MongoDB是一款NoSql數據庫。NoSql數據庫叫非關系型數據庫,NoSql的全名Not?only sql。是為了解決高并發、高可用、高可擴展,以及大數據存儲等一系列問題而產生的數據庫解決方案。NoSql,它不能替代關系型數據庫,只能作為關系型數據庫的一個良好補充。
NoSql數據庫又分為多種,如鍵值(Key-Value)存儲數據庫(如redis),列存儲數據庫(如HBase),文檔型數據庫(如MongoDB),圖形(Graph)數據庫等。
MongoDB作為文檔型數據庫,其典型應用是Web應用(與Key-Value類似,Value是結構化的),它的數據模型是 一系列鍵值對。MongoDB的優勢是數據結構要求不嚴格,操作靈活;劣勢是查詢性能不高,而且缺乏統一的查詢語法。
當前,我們以win7系統為例,64位win7安裝MongoDB相對簡單,因為MongoDB官網在community server版本(https://www.mongodb.com/download-center#community)中僅推薦了一款64位的MongoDB,在安裝方面,網上也提供了不少帖子,相信大家都能順利安裝好。
?
相比較而言,32位的win7系統在安裝MongoDB時就要繁瑣很多。那么,對于使用32位win7系統的朋友而言,應該如何安裝MongoDB,以及使用呢?
第一步:
首先,在這個網址中https://www.mongodb.org/dl/win32/i386下載后綴為msi的MongoDB,此處以v3.2.19版本為例。
下載了MongoDB后,雙擊運行即可進入安裝;在安裝過程中,可以選擇程序安裝路徑。在此,我將程序安裝路徑改為E:\mongodb2。
MongoDB安裝好后,在E:\mongodb2下會生成一個bin目錄,bin目錄是可執行文件目錄,啟動mongo的服務器端以及客戶端都在這里;同時,我們還要在E:\mongodb2下新建三個目錄:conf為配置文件存放目錄;data為數據存放目錄;log為日志存放目錄。如下所示:
接著,在conf下創建一個名稱為mongod.conf的配置文件,里面內容如下:
port=6699 dbpath=E:\mongodb2\data logpath=E:\mongodb2\log\mongod.log? 配置文件里配置了MongoDB服務開啟后的端口,數據文件目錄,日志存放目錄。為mongod.conf的常見基本配置參數釋義(本文簡單演示,僅配置上面三項即可):
#數據庫數據存放目錄 dbpath=../data #數據庫日志存放目錄 logpath=../logs/mongod.log #以追加的方式記錄日志 logappend = true #端口號 默認為27017 port=6699 #以后臺方式運行進程 fork=true #開啟用戶認證 auth=true #關閉http接口,默認關閉http端口訪問 nohttpinterface=true #mongodb所綁定的ip地址 bind_ip = 127.0.0.1 #啟用日志文件,默認啟用 journal=true #這個選項可以過濾掉一些無用的日志信息,若需要調試使用請設置為false quiet=true ?同時,在log目錄下創建名稱為mongod.log的文件,里面內容可以為空,在MongoDB服務啟動后,這個日志文件里會記錄服務運行情況。
第二步:
接下來,將MongoDB安裝為Windows服務,這步很關鍵。先是切換到bin目錄下,然后打開DOS窗口,執行如下命令:
E:\mongodb2\bin>mongod --dbpath "E:\mongodb2\data" --logpath "E:\mongodb2\log\mongod.log" --install --serviceName "MongoDB" --journal? 這時,查看win7計算機管理的服務列表,可以看到名稱為MongoDB的Windows服務已經在里面。
第三步:
我們可以Windows的服務列表窗口里開啟MongoDB服務,也可以在DOS窗口里啟動MongoDB服務:
net start MongoDB? 這時,計算機的服務列表里顯示MongoDB服務已經開啟。我們還可以點擊MongoDB的啟動類型,將其設置為手動。如下所示:
其實,我們在進行完“第二步”后,不必再進行第三步(第三步主要是為了演示Windows服務的啟動,此處可以忽略),直接通過一個批處理文件配置MongoDB的端口(如果MongoDB沒有安裝在本地,需要在配置文件mongod.conf里加上"bind_id=ip地址")等信息,然后啟動MongoDB服務;接著,再通過一個批處理文件啟動操作MongoDB的客戶端即可。這就是我們下面要講述的內容。
為了以后啟動MongoDB服務,以及使用MongoDB服務更方便,我們還可以制作兩個批處理文件。一個名稱為“啟動MongoDB服務端.bat”,內容如下:
E: cd E:\mongodb2\bin mongod -f E:\mongodb2\conf\mongod.conf --journal pause? 另一個是啟動MongoDB客戶端,從而操作MongoDB。這個批處理文件名稱為“啟動MongoDB客戶端.bat”,內容如下:
E: cd E:\mongodb2\bin mongo 127.0.0.1:6699/test pause? 接著,雙擊“啟動MongoDB服務端.bat文件,啟動成功后顯示如下:
?
這時,在瀏覽器地址欄里輸入http://localhost:6699,顯示如下:
? 這說明MongoDB服務已經設置和開啟成功。接下來,啟動MongoDB客戶端,操作MongoDB。
雙擊“啟動MongoDB客戶端.bat”批處理文件,顯示如下:
說明MongoDB客戶端啟動成功。
到此,MongoDB安裝完畢,客戶端也啟動完畢,我們接下來操作MongoDB。
MongoDB有這些基本操作命令,我們了解下:
(1)查詢數據庫結構: #查看現有數據庫 > show dbs local 0.078GB #使用某個數據庫;沒有就創建并使用 > use yc switched to db yc #插入數據 > db.yc.insert({"_id":1001,"name":"lzy","sex":"男"}) WriteResult({ "nInserted" : 1 }) #插入指定數據庫下的所有數據 > db.yc.find() { "_id" : 1001, "name" : "lzy", "sex" : "男" } #更新數據 > db.yc.update({"_id":1001},{"name":"nlz","sex":"女"}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.yc.find() { "_id" : 1001, "name" : "nlz", "sex" : "女" } #刪除數據 > db.yc.remove({"_id":1001}) WriteResult({ "nRemoved" : 1 }) > db.yc.find() #創建數據集合 > db.createCollection("colA",{autoIndexId:true}) {"note" : "the autoIndexId option is deprecated and will be removed i"ok" : 1 } > db.colA.insert({"_id":1001,"name":"張三"}) WriteResult({ "nInserted" : 1 }) > for(i=1;i<=10;i++) db.colA.insert(data:i) 2018-04-29T00:53:17.887+0800 E QUERY [thread1] SyntaxError: missing ) aft #批量插入數據 > for(i=1;i<=10;i++) db.colA.insert({data:i}) WriteResult({ "nInserted" : 1 }) > db.colA.find() { "_id" : 1001, "name" : "張三" } { "_id" : ObjectId("5ae4a71301b5efddc588c80a"), "data" : 1 } { "_id" : ObjectId("5ae4a71301b5efddc588c80b"), "data" : 2 } { "_id" : ObjectId("5ae4a71301b5efddc588c80c"), "data" : 3 } { "_id" : ObjectId("5ae4a71301b5efddc588c80d"), "data" : 4 } { "_id" : ObjectId("5ae4a71301b5efddc588c80e"), "data" : 5 } { "_id" : ObjectId("5ae4a71301b5efddc588c80f"), "data" : 6 } { "_id" : ObjectId("5ae4a71301b5efddc588c810"), "data" : 7 } { "_id" : ObjectId("5ae4a71301b5efddc588c811"), "data" : 8 } { "_id" : ObjectId("5ae4a71301b5efddc588c812"), "data" : 9 } { "_id" : ObjectId("5ae4a71301b5efddc588c813"), "data" : 10 }#修改數據集合里某個數據的值
> db.colA.update({"name":"張三"},{"name":"李四"})
? 上面是MongoDB的一些基本操作指令。通過上述操作,我們可以觀察出一個特點,那就是:MongoDB存儲數據是以json格式進行的(如:({"key":"value,..."}))。
接下來,我們再看在Java程序中如何操作MongoDB。
我們以idea這款IDE工具為例,創建一個工程,然后在工程里添加MongoDB與單元測試的依賴(這是因為我們要用單元測試展開測試),如下圖:
? 接下來,測試連接MongoDB服務(TestConnection2.java):
package com.itszt;import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; import org.junit.Test;/*** 測試連接MongoDB*/ public class TestConnection2 {@Testpublic void testConnMongo(){//連接到MongoDB服務MongoClient mongoClient=new MongoClient("127.0.0.1",6699);//連接到MongoDB數據庫MongoDatabase mongoDatabase = mongoClient.getDatabase("test");System.out.println("mongoDatabase = " + mongoDatabase);System.out.println("MongoDB connect successfully");//關閉MongoDB服務mongoClient.close();} }? 控制臺打印如下(顯示正常):
mongoDatabase = com.mongodb.MongoDatabaseImpl@150efb8 MongoDB connect successfully? 接下來,我們再通過java程序操作MongoDB(TestCURD2.java):
package com.itszt;import com.mongodb.BasicDBObject; import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.CreateCollectionOptions; import org.bson.Document; import org.junit.After; import org.junit.Before; import org.junit.Test;import java.util.ArrayList; import java.util.regex.Pattern;/*** 測試MongoDB的數據操作*/ public class TestCURD2 {private MongoClient mongoClient;private MongoDatabase mongoDatabase;@Beforepublic void init() {mongoClient = new MongoClient("127.0.0.1", 6699);mongoDatabase = mongoClient.getDatabase("test");System.out.println("MongoDB connect successfully");}@Afterpublic void close() {mongoClient.close();}@Testpublic void testCollection() {CreateCollectionOptions collectionOptions = new CreateCollectionOptions();collectionOptions.autoIndex(true);/*capped為true,表示起用封閉的集合,集合容量有固定上限,集合超過上限時會自動覆蓋其最舊的目錄如果capped為true,則必須指定size參數sizeInBytes()表示集合字節大小*//*collectionOptions.capped(true);collectionOptions.sizeInBytes(1024*1024*100);*///設置集合中文檔個數的上限collectionOptions.maxDocuments(1000);mongoDatabase.createCollection("colD", collectionOptions);MongoCollection<Document> colD = mongoDatabase.getCollection("colD");System.out.println("colD = " + colD);}//測試對于數據集合的添加@Testpublic void testInsert() {MongoCollection<Document> colD = mongoDatabase.getCollection("colD");ArrayList<Document> documents = new ArrayList<>();for (int i = 1; i <= 10; i++) {Document document = new Document();document.append("userName", "張三-" + i);document.append("userPwd", "admin_" + i);documents.add(document);}//批量插入數據colD.insertMany(documents);//如果插入單條數據,則是://colD.insertOne(Docoment document);}//測試查詢數據集合@Testpublic void testFind(){MongoCollection<Document> colD = mongoDatabase.getCollection("colD");//正則條件BasicDBObject basicDBObjectReg = new BasicDBObject();Pattern pattern = Pattern.compile(".*[0]");basicDBObjectReg.put("$regex",pattern);//條件約束BasicDBObject basicDBObject = new BasicDBObject();basicDBObject.append("userName",basicDBObjectReg);FindIterable<Document> documents = colD.find(basicDBObject);MongoCursor<Document> iterator = documents.iterator();Document document =null;while (iterator.hasNext()){document = iterator.next();//取得整個數據System.out.println("document = " + document);//取得若干字段值System.out.println(document.get("userName")+"-->"+document.get("userPwd"));}}//測試對于數據集合的修改@Testpublic void testUpdate(){MongoCollection<Document> colD = mongoDatabase.getCollection("colD");BasicDBObject basicDBObjectOld = new BasicDBObject();basicDBObjectOld.put("userName","李四");BasicDBObject basicDBObjectNew = new BasicDBObject();basicDBObjectNew.put("userName","王五");BasicDBObject update = new BasicDBObject("$set", basicDBObjectNew);colD.updateOne(basicDBObjectOld,update);//批量修改//colD.updateMany(basicDBObjectOld,update);}//測試對于數據集合的刪除@Testpublic void testDelete(){MongoCollection<Document> colD = mongoDatabase.getCollection("colD");//正則條件BasicDBObject basicDBObjectReg = new BasicDBObject();Pattern pattern = Pattern.compile("王.*");basicDBObjectReg.put("$regex",pattern);//條件約束BasicDBObject basicDBObject = new BasicDBObject();basicDBObject.append("userName",basicDBObjectReg);colD.deleteOne(basicDBObject);//批量刪除 // colD.deleteMany(basicDBObject);} }
轉載于:https://www.cnblogs.com/lizhangyong/p/8970066.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的MongoDB的安装与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mockito 实战总结笔记
- 下一篇: WINCE中设置FTP用户密码