摘要:下安裝和配置安裝由于我正好有一個的服務器,所以順便來試試下安裝。下安裝其實也很簡單,使用對應的包管理器可以比較方便的安裝和啟動。首先需要安裝包,如果使用的話非常簡單,右鍵點擊項目,選擇管理安裝的包,然后搜索并安裝即可。
MongoDB是一個著名的NoSQL數據庫,顧名思義就是不使用SQL的數據庫,目前在很多場景都有使用。如果你不喜歡使用笨拙的各種SQL數據庫,可以嘗試使用一下MongoDB,會有不一樣的感受。本文就是一篇簡單的Windows下的安裝和使用教程。
下載和安裝首先,先到MongoDB官網下載頁下載社區版的服務器,由于這里是Windows系統,所以當然下載Windows版本的。注意我們要下載的是社區版,而不是導航條第一個的Atlas。如你所見,MongoDB官網是一個商業化的網站,Atlas正是它提供的一個商業版服務,可以讓我們連接到他們的服務器。
具體版本默認第一個就可以了,功能最全,帶有SSL支持。注意三個版本都是64位的,所以32位的操作系統無法運行。下載完成之后安裝即可,大約150M左右的安裝包,很快就可以安裝完畢。
配置和啟動對于我來說,我將其安裝到了D:Program FilesMongoDB。等到安裝完成,打開D:Program FilesMongoDBServer3.4in就會發現MongoDB的一系列程序,主要用到的就是mongo.exe(客戶端)和mongod.exe(服務端)。為了使用方便,最好把這個路徑添加到環境變量中,以后就可以直接在終端中使用這些命令了。首先要做的事情當然是啟動服務端。在終端直接執行mongod命令即可。
mongod
然后你就會發現如圖所示的錯誤。
當然具體錯誤圖里面說的很清楚了,沒有數據文件夾。默認Windows版本,會在你安裝盤符下尋找data/db文件夾作為數據文件夾,我的D盤上自然沒有,所以會出現錯誤。解決辦法很簡單,在命令上添加--dbpath參數即可。
mongod --dbpath d: estmongodbdata
當然還可以使用配置文件。配置文件名字可以隨便起,但是格式必須是YAML格式的。例如我希望讓可執行文件目錄下的data文件夾作為數據文件夾,并且對于每個多帶帶的數據庫都有自己的目錄,就可以這么配置(別忘了創建對應文件夾)。關于配置文件的詳細文檔可以參考官方Configuration File Options。
storage: dbPath: data directoryPerDB: true
配置完成后,使用-f或者--config參數來指定配置文件。
mongod --config /etc/mongod.conf mongod -f /etc/mongod.conf
這樣,MongoDB服務器就可以成功啟動了。
注冊為Windows服務每次啟動都要輸入命令很麻煩,MongoDB提供了注冊為Windows服務的功能。本來一開始我是用的winsw來注冊服務的,然后發現MongoDB官方就帶了這個功能。所以來介紹一下。
其實很簡單,打開上面介紹的配置文件,然后添加下面一節內容,具體名稱自己修改。這里用戶名和密碼不是必須的。這里日志設置是必須的,不然會提示無法安裝Windows服務。
storage: dbPath: "D:Program FilesMongoDBServer3.4data" directoryPerDB: true processManagement: windowsService: serviceName: MongoDB displayName: MongoDB description: MongoDB serviceUser:servicePassword: systemLog: destination: file path: "D:Program FilesMongoDBServer3.4mongod.log"
然后在運行服務端的時候添加--install參數,而且這里的配置文件路徑必須使用絕對路徑。別忘了使用管理員權限的cmd或者Powershell來運行。
mongod -f "D:Program FilesMongoDBServer3.4config.yaml" --install
安裝之后的服務默認是開機自啟的,不過沒有啟動,所以還需要我們手動啟動。手動在服務中啟動,或者在管理員權限的Powershell中執行下面的命令。
Start-Service MongoDB客戶端連接
如果沒有修改端口號等配置的話,可以直接連接。
PS C:WINDOWSsystem32> mongo MongoDB shell version v3.4.10 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.10 Server has startup warnings: 2017-11-20T04:48:38.134+0800 I CONTROL [initandlisten] 2017-11-20T04:48:38.134+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2017-11-20T04:48:38.134+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2017-11-20T04:48:38.135+0800 I CONTROL [initandlisten] >Linux下安裝和配置 安裝
由于我正好有一個Dedicenter的服務器,所以順便來試試Linux下安裝。Linux下安裝其實也很簡單,使用對應的包管理器可以比較方便的安裝和啟動。例如我的服務器是CentOS 7的系統,所以使用yum包管理器來安裝軟件。下面的命令同時安裝了客戶端和服務器端。
$ sudo yum install mongodb-server mongodb
當然我安裝完了之后發現了一個問題,那就是CentOS自帶的MongoDB版本比較低,現在的版本是3.4,而自帶的版本是2.6.所以還是需要自己安裝最新版的。具體方法需要搜索。對于CentOS 來說,首先需要創建社區源的文件/etc/yum.repos.d/mongodb-org-3.4.repo,內容如下。
[mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
然后安裝mongodb-org軟件包,會包括客戶端、服務端、shell工具等四個軟件包。
$ sudo yum install mongodb-org
如果對應的系統還啟用了SELinux,那么還需要做一些額外工作,這些工作就需要查看官方文檔Install MongoDB Community Edition on Red Hat Enterprise or CentOS Linux了。我的服務器沒有SELinux功能,所以不需要這額外的步驟了。
配置并啟動Linux下,MongoDB的數據文件在/var/lib/mongo下,日志文件在/var/log/mongodb下,這些都不需要更改。如果有需要的話,別忘了設置對應的權限。
首先需要編輯一下配置文件/etc/mongod.conf。先來設置一下監聽IP,由于這是我的服務器,我希望可以在外網訪問數據庫,所以把IP這一行注釋掉,或者修改成0.0.0.0。其余配置按需求更改。
net: port: 27017 # bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
然后啟動服務端。
sudo systemctl enable mongod sudo systemctl start mongod
然后輸入mongo命令來連接。如果是連接其他主機的服務器,需要使用額外的參數。
mongo -host XXX.XX.XXX.XXX -port 27017基本使用 用戶授權
在前面我們一直都沒有設置用戶名和密碼,這可能導致安全問題,登錄客戶端的時候也同時給了警告。所以我們第一件事情就是設置用戶名和密碼。這部分可以參考官方文檔Enable Auth。
首先先以默認方式登錄,然后切換到管理員數據庫并新建管理員用戶。
use admin db.createUser( { user: "admin", pwd: "12345678", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
然后在重啟服務端的時候同時添加--auth參數,或者在配置文件中設置。
security: authorization: enabled
服務器啟用驗證之后,客戶端在登錄的時候也需要驗證。可以在啟動的時候通過參數來驗證。
mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
或者先以無權限方式登錄,然后在進行驗證。
use admin db.auth("myUserAdmin", "abc123" )
當然,實際情況中我們肯定不會使用管理員去登錄一般數據庫(實際上MongoDB也不允許,管理員只有創建用戶和角色的權限),所以還需要創建一個普通用戶進行訪問。在你使用的數據庫中創建一個用戶,并賦予合適的權限即可。登錄方式基本同上,只不過驗證數據庫改一下就行。
use test db.createUser( { user: "myTester", pwd: "xyz123", roles: [ { role: "readWrite", db: "test" }, { role: "read", db: "reporting" } ] } )
當然,如果是開發和測試,建立一個萬能的管理員用戶更加省時。
use admin db.createUser( { user: "superuser", pwd: "12345678", roles: [ "root" ] } )插入數據
先來說說MongoDB的增刪查改。這一部分的官方文檔是MongoDB CRUD Operations,這一塊的文檔做的非常好,還配有Web控制臺可以連接到它的示例數據庫,所以我們可以一邊閱讀文檔一邊測試命令,非常方便。
首先先選定一個數據庫,如果該數據庫不存在,會創建這個數據庫。
use hello
先來看看插入操作,主要有以下兩個方法,分別用于一次性插入一個或多個數據。如果集合不存在,會首先創建這個集合。
db.collection.insertOne()")
db.collection.insertMany()")
下面是一個簡單的例子。插入的數據類似JSON格式。
> db.user.insertOne({id:1,name:"yitian",age:24}) { "acknowledged" : true, "insertedId" : ObjectId("5a12bc37f8fe60078d1a24fe") } > db.user.insertOne({id:2,name:"zhang3",age:25}) { "acknowledged" : true, "insertedId" : ObjectId("5a12bc93f8fe60078d1a24ff") }
如果要使用insertMany插入多個數據,需要使用[]來傳遞一個數組。這是官方文檔的例子。
db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } }, { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } }, { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } } ])查詢數據
首先準備一些示例數據。
db.inventory.insertMany([ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" }, { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" }, { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" }, { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" }, { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" } ]);
如果要查詢所有數據,直接傳遞一個空對象。
db.inventory.find( {} )
如果用具體的條件來查詢,直接傳遞具體的鍵值對{
db.inventory.find( { status: "D" } )
如果使用條件查詢的話,需要傳遞查詢屬性、運算符以及查詢條件{
# 查詢stauts是A或D的 db.inventory.find( { status: { $in: [ "A", "D" ] } } ) # 查詢status是A,且qty小于30的 db.inventory.find( { status: "A", qty: { $lt: 30 } } ) # 查詢status是A或qyt小于30的 db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } ) # 更復雜的查詢 db.inventory.find( { status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] } )更新數據
更新操作主要使用以下三個函數,用于更新一個、多個或者替換數據。
db.collection.updateOne(
db.collection.updateMany(
db.collection.replaceOne(
先來看看更新一個數據,需要用到$set操作符,用來設置新屬性。$currentDate操作符用于設置最后修改時間,如果lastModified屬性不存在,就會添加這個屬性并設置為當前時間。
db.inventory.updateOne( { item: "paper" }, { $set: { "size.uom": "cm", status: "P" }, $currentDate: { lastModified: true } } )
類似的,是更新多條數據。
db.inventory.updateMany( { "qty": { $lt: 50 } }, { $set: { "size.uom": "in", status: "P" }, $currentDate: { lastModified: true } } )
最后是替換數據。
db.inventory.replaceOne( { item: "paper" }, { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] } )
最后來說說。目前這個選項只有一個upsert : true,如果設置為true,那么如果沒有查詢到相應的數據,會將更新的數據作為新數據插入到數據庫中。
刪除數據刪除數據相對來說很簡單,語法和前面基本類似。所以直接來看李子壩。
首先是刪除所有數據。
db.inventory.deleteMany({})
刪除符合條件的所有數據。
db.inventory.deleteMany({ status : "A" })
刪除單條數據。
db.inventory.deleteOne( { status: "D" } )編程使用MongoDB
官方文檔MongoDB CRUD Operations做的很不錯的一點就是包含了多種語言的范例,基本上支持了現在所有的主流語言。
使用Python官方推薦使用PyMongo庫來操作MongoDB。首先需要安裝。文檔可以參考PyMongo 3.5.1 Documentation。
pip install PyMongo
簡單的增刪查改例子如下。
from pymongo import MongoClient from pprint import pprint # 連接數據庫 client = MongoClient("localhost", 27017) # 選擇數據庫 db = client["hello"] # 獲取集合 user = db.user # 插入數據 user.insert_one({"_id": 1, "name": "yitian", "age": 24}) user.insert_one({"_id": 2, "name": "zhang3", "age": 25}) user.insert_one({"_id": 3, "name": "li4", "age": 26}) # 更新數據 user.update_one({"_id": 1}, {"$set": {"name": "易天"}}) user.update_many({}, {"$inc": {"age": 1}}) # 查詢數據 yitian = user.find_one({"name": "yitian"}) yitian = user.find_one({"_id": 1}) pprint(yitian) print("------所有數據--------") for u in user.find(): pprint(u) print("------年齡大于25的--------") for u in user.find({"age": {"$gt": 25}}): pprint(u) # 刪除所有數據 user.remove({})使用C
C#和Kotlin是我最喜歡的兩門語言。所以順便來看看如何用C#訪問MongoDB。對應的官網文檔是MongoDB .NET Driver。
首先需要安裝NuGet包,如果使用Visual Studio的話非常簡單,右鍵點擊項目,選擇管理安裝的NuGet包,然后搜索并安裝MongoDB即可。下面是個簡單的例子。
public static void Sample() { var client = new MongoClient("mongodb://localhost:27017"); var db = client.GetDatabase("hello"); var user = db.GetCollection圖形客戶端("user"); user.InsertOne(new BsonDocument { { "name", "yitian" }, { "_id", 1 }, { "age", 25 } }); user.InsertOne(new BsonDocument { { "name", "li4" }, { "_id", 3 }, { "age", 24 } }); Console.WriteLine("查詢單條數據"); var filter = Builders .Filter.Eq("_id", 1); Console.WriteLine( user.Find(filter).First() ); Console.WriteLine("更新用戶姓名"); user.FindOneAndUpdate(filter, Builders .Update.Set("name", "易天")); Console.WriteLine("條件查詢大于25的"); filter = Builders .Filter.Gte("age", 25); user.Find(filter).ToList().ForEach(e => Console.WriteLine(e)); Console.WriteLine("所有數據"); user.Find(new BsonDocument()).ToList().ForEach(e => Console.WriteLine(e)); user.DeleteMany(new BsonDocument()); }
最后來介紹一下幾個圖形客戶端,方便我們對數據進行可視化處理。
Compass第一個就是MongoDB官方的圖形客戶端Compass,用起來還可以。
MongoBooster第二個叫MongoBooster,是一個MongoDB的IDE,智能提示和補全比較方便,同時支持流式API方便查詢。
Robo 3T第三個是Robo 3T,原名叫做Robomongo,是一個輕量級圖形客戶端。如果希望更多功能,還可以下載使用Studio 3T,一個智能IDE。
最后說一下我對MongoDB的感受。它是一個比較輕量級的NoSQL數據庫,存儲序列化的數據很合適,但是多表查詢功能比較弱,要想做到SQL數據庫那種復雜的多表查詢比較困難。但是如果是個人小項目的話,還是非常推薦使用的,用起來心理作用上比SQL數據庫的逼格還是要高一些的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44490.html
摘要:概述使用本教程在系統上安裝社區版平臺支持自版本開始不支持請使用更新版本的來使用更新版本的重要如果你正在運行任何版本的或者請安裝修復程序以解決上的內存映射文件的問題要求社區版需要或者更高版本安裝程序包含所有其它軟件依賴項將自動更新使用文件安裝 概述 使用本教程在 Windows 系統上安裝 MongoDB 社區版. 平臺支持: 自2.2版本開始, MongoDB 不支持 Windo...
摘要:概述使用這個教程在和使用軟件包安裝社區版雖然發行版包含自己的軟件包官方的社區版包通常是最新的平臺支持本安裝教程僅支持位操作系統詳細信息請參閱平臺支持軟件包在自己的存儲庫中提供官方支持軟件包此存儲庫包含以下軟件包軟件名簡介一個元軟件包將自動 概述 使用這個教程在 SUSE Linux 11 和 12 使用 .rpm 軟件包安裝 MongoDB 社區版. 雖然 SUSE 發行版包含自己的 ...
摘要:概述使用這個教程在或者使用軟件包安裝社區版雖然包含自己的軟件包但官方的社區版包通常是最新的本安裝教程僅支持位操作系統詳細信息請參閱平臺支持這些軟件包可以與其它版本一起工作。 概述 使用這個教程在 Debian 7 Wheezy 或者 Debian 8 Jessie 使用 .deb 軟件包安裝 MongoDB 社區版. 雖然 Debian 包含自己的 MongoDB 軟件包, 但官方的 ...
摘要:概述使用這個教程在使用軟件包安裝社區版本安裝教程僅支持位操作系統詳細信息請參閱平臺支持軟件包在自己的存儲庫中提供官方支持軟件包此存儲庫包含以下軟件包軟件名簡介一個元軟件包將自動安裝下面列出的四個組件包包含守護程序和關聯配置和初始化腳本 概述 使用這個教程在 Amazon Linux 使用 .rpm 軟件包安裝 MongoDB 社區版. 本安裝教程僅支持64位操作系統. 詳細信息請參閱平...
摘要:概述使用這個教程在使用軟件包安裝社區版包含自己的軟件包但官方的社區版包通常是最新的平臺支持本安裝教程僅提供位長期支持版本例如,等等這些軟件包可能將和其它版本一起工作然后它們并不支持軟件包在自己的存儲庫中提供官方支持軟件包此存儲庫包含以下軟件 概述 使用這個教程在 LTS Ubuntu Linux 使用 .deb 軟件包安裝 MongoDB 社區版. Ubuntu 包含自己的 Mong...
摘要:概述使用這個教程在企業版或者使用軟件包安裝社區版雖然一些發行版包含自己的軟件包官方的社區版包通常是最新的平臺支持本安裝教程僅支持位操作系統詳細信息請參閱平臺支持不建議對企業版的支持軟件包在自己的存儲庫中提供官方支持軟件包此存儲庫包含以下軟件 概述 使用這個教程在 Red Hat 企業版 Linux 或者 CentOS6/7 Linux 使用 .rpm 軟件包安裝 MongoDB 社區版...
閱讀 1259·2021-10-11 10:57
閱讀 2045·2021-09-02 15:15
閱讀 1607·2019-08-30 15:56
閱讀 1195·2019-08-30 15:55
閱讀 1157·2019-08-30 15:44
閱讀 977·2019-08-29 12:20
閱讀 1321·2019-08-29 11:12
閱讀 1066·2019-08-28 18:29