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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280453.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280453.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280453.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux 基準測試_如何對Linux系統進行基準測試:3個開源基準測試工具

linux 基準測試Linux’s command-line utilities can do anything, including perform benchmarks – but using a dedicated benchmarking program is a simpler and more foolproof process. These utilities allow you to perform reproducible tests across different syst…

.NET 7 新增的 IParsable 接口介紹

.NET 7 是一個新版本的 .NET&#xff0c;它新增了一個名為 IParsable 的接口。這個接口可以幫助開發人員更容易地在代碼中解析字符串。IParsable 接口包含兩個方法&#xff1a;Parse 和 TryParse。Parse 方法用于將一個字符串解析為指定類型的值。如果解析失敗&#xff0c;則會…

CentOS 7安裝nginx+php+mysql環境

0x01 安裝php 1、首先得安裝第三方軟件庫 yum install epel-release 復制代碼2、安裝依賴包 yum install gcc gcc-c glibc libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-de…

spring+springMvc+struts的SSH框架整合

1.建立一個web項目 2.導入SSH框架所需jar包 3.配置web.xml文件 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:sc…

聽說這個語言認知服務又出新功能了?

點擊上方藍字關注我們&#xff08;本文閱讀時間&#xff1a;7分鐘)語言是人類智能發展的基石。鑒于語言擁有普遍性&#xff0c;幾乎沒有特定的技術或 AI 技術得以顛覆整個社會。微軟的使命是賦能地球上的每個人和每個組織&#xff0c;幫助他們取得更多成就。立足于該使命&#…

強大的XML

2018-04-23 20:29:26 XML&#xff1a;Extensible Markup Language&#xff0c;也就是可擴展標記語言。XML和HTML格式是古老的標記通用語言SGML的衍生語言。 XML文件是可以用來作為配置文件的&#xff0c;相比于其他配置文件的規范&#xff0c;XML的好處在于通過自定義的標記&am…

rest_framework03:查詢所有/新增數據/刪除一個數據/封裝Response/序列化與反序列化

查詢所有 1.創建新clase和url&#xff0c;避免與查詢一個功能邏輯混亂。 2.增加manyTrue&#xff0c; book_serBookSerializer(books,manyTrue) urls.py: path(books/,views.BooksView.as_view()) views.py class BooksView(APIView):def get(self,request):response_msg …

如何對DevOps數據庫進行源代碼控制

提綱&#xff1a; 包括索引在內的數據庫模式需要進行源代碼控制諸如查詢表這類用于控制業務邏輯的數據需要進行源代碼控制開發人員需要一種能夠便捷地創建本地數據庫的方法共享數據庫的更新只能通過構建服務器完成 健壯的DevOps環境需要對系統的每個組件進行持續集成。但是&…

自定義異常最佳實踐_播放,自定義和組織媒體的最佳文章

自定義異常最佳實踐Computers today are used for much more than generating documents, writing and receiving email, and surfing the web. We also use them to listen to music, watch movies and TV shows, and to transfer media to and from mobile devices. 如今&…

CSS中的路徑裁剪樣式clip-path

前面的話 CSS借鑒了SVG裁剪的概念&#xff0c;設置了clip-path樣式&#xff0c;本文將詳細介紹路徑裁剪clip-path 概述 clip-path屬性可以防止部分元素通過定義的剪切區域來顯示&#xff0c;僅通過顯示的特殊區域。剪切區域是被URL定義的路徑代替行內或者外部svg&#xff0c;或…

socket編程學習筆記

socket編程&#xff1a; 1、網絡基礎知識 兩臺計算機通過網絡進行通信&#xff0c;首先兩臺計算機要有唯一的標識&#xff0c;即唯一的IP地址。其次他們要有共同的語言用來交流即協議。再者&#xff0c;每套主機要有相應的端口號。  TCP/IP協議&#xff1a;   --TCP/IP協議是…

rest_framework04:ModelSerializer/Serializer高級用法

ModelSerializer 1.減小序列化類代碼 2.不需要重寫update&#xff0c;create ser.py class BookModelSerializer(serializers.ModelSerializer):class Meta:modelBookfields__all__ #序列化全部字段# fields(name,price) # 序列化指定字段# exclude(name,) # 與fields 不能…

配置本地及網絡yum源(詳細步驟)

我們以centos6為范例演示 1、[rootCentos6 ~]# cd /etc/yum.repos.d/ [rootCentos6 yum.repos.d]# ls CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repoCentOS-Debuginfo.repo CentOS-Media.repo先羅列出相關文件 2、[rootCentos6 yum.repos.d]# vim CentOS-Base.rep…

macos mojave_如何修復macOS Mojave上的模糊字體(使用亞像素抗鋸齒)

macos mojaveApple’s macOS Mojave disables subpixel antialiasing, also known as font smoothing, by default. On a MacBook Air or a desktop Mac hooked up to a non-Retina display, upgrading will make your fonts look worse. 蘋果的macOS Mojave默認情況下禁用子像…

為什么我要寫博客

原因在這啦 一、我覺得分享是一種精神&#xff0c;分享是我的樂趣所在&#xff0c;不是說我覺得我講得一定是對的&#xff0c;我講得可能很多是不對的&#xff0c;但是我希望我講的東西是我人生的體驗和思考&#xff0c;是給很多人反思&#xff0c;也許給你一秒鐘、半秒鐘&…

一個變量命名神器:支持中文轉變量名

變量命名的規范&#xff0c;對于我們編程&#xff0c;大家都知道是非常重要的&#xff0c;上次給大家推薦過一個命名輔助工具《程序員還在為變量取名苦惱&#xff0c;那是因為你不知道&#xff0c;這個變量命名神器》&#xff0c;但大家一致反饋存在2個問題&#xff1a;1、網速…

rest_framework05:GenericAPIView用法/擴展類5個/子類9個/ViewSetMixin 自定義方法名字

GenericAPIView 1.視圖層類使用GenericAPIView繼承&#xff0c;能簡化類里的方法code。 2.簡化后的方法code格式基本通用&#xff0c;簡單修改即可應用到其他類。 一、class開始加入 queryset Book.objectsserializer_class BookModelSerializer 二、方法里獲取對象 a.查…

1.操作系統概述

2019獨角獸企業重金招聘Python工程師標準>>> 操作系統的發展過程 無操作系統的計算機系統單道批處理系統&#xff08;50年代&#xff0c;系統資源利用率低&#xff09;多道批處理系統&#xff08;60年代&#xff09;分時系統&#xff08;70年代&#xff09;實時系統…

測聽hl和nhl的區別_播放NHL曲棍球的最便宜方法(無電纜)

測聽hl和nhl的區別If you’re like me, you watch hockey, and…basically no other sports. You also, like me, would like to skip the cable subscription. So what’s the cheapest way to watch NHL hockey online so you can cut the cord? 如果您像我一樣&#xff0c;…

制作一個讓客戶滿意的軟件

我看了《構建之法》的第八章“需求分析”我對如何制作一個讓客戶滿意的軟件有了一點兒頭緒&#xff0c;的但是還是有一些迷惑。我通過看書總結和百度查找有了一點兒總結&#xff1a;我們在制作軟件的過程中應該及時與用戶溝通交流&#xff0c;交換意見&#xff0c;并及時實現用…