MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。它是一個面向文檔存儲的數據庫,操作起來比較簡單。可通過本地或者網絡創建數據鏡像,具有很強的可擴展性。MongoDB 支持的編程語言有Ruby,Python,Java,C++,C#,PHP等。本文以Windows平臺爲例,介紹Windows下MongoDB的安裝和使用方法。
1 安裝MongoDB
進入MongoDB官網,https://www.mongodb.com/download-center/community ,如下圖
從右側下載欄目中找到windows平臺,version選擇最新即可。下載後雙擊打開進入安裝步驟,可以自定義安裝路徑,如果不想安裝在默認的C盤,可以自定義到D盤或者E盤等。在安裝中有一個默認安裝MongoDB compass的選項,一般我們不需要用GUI來管理,所以可以去掉勾選。
安裝完成後,需要爲MongoDB手動創建數據存儲目錄。這個數據目錄需要放在根目錄下(如C:\和D:\)。如果程序安裝在了D盤,那麼我們就在D盤根目錄創建一個data文件夾,在data文件夾中繼續創建一個db文件夾,這樣就有了一個數據目錄“D:\data\db”。
2 運行MongoDB服務器
要使用MongoDB,需要先將服務器運行起來。在第一步中已經安裝好了MongoDB,那麼我們要通過命令行(使用cmd或者windows powershell)進入到安裝目錄下的工具箱
Your_Path_To_MongoDB\MongoDB\Server\4.2\bin。例如我自己的安裝路徑爲D:\Program Files\MongoDB\Server\4.2\bin。
然後運行.\mongod.exe --dbpath d:\data\db
如果沒有報錯則運行成功。有的時候MongoDB安裝完了提示需要重啓才能使用,那麼可以在安裝完之後先重啓機器。
關於端口問題,網上有些同學說連接MongoDB失敗,那可能是因爲使用了不同的端口去連接。MongoDB在自己的配置文件(mongod.cfg)中默認配置了監聽端口爲27017,所以如果你希望使用別的端口可以在配置文件中更改,也可以使用 “--port 端口號” 來指定端口。
3 使用Python操作數據庫
Python需要通過PyMongo這個庫來實現與MongoDB的連接。建議使用Python3自帶的pip包管理工具來安裝pymongo。
pip3 install pymongo
安裝完之後,在python環境中使用 import pymongo 來測試安裝是否成功。
一些常用的命令如下:
(1) 創建數據庫
創建數據庫需要使用MongoClient對象
#!/usr/bin/python3
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["testdb"]
MongoDB數據庫只有在插入數據後纔會真正創建。也就是說數據庫創建集合(數據表)後,必須再插入一個文檔(記錄),數據庫才創建完成。
判斷數據庫是否已經存在:
dblist = myclient.list_database_names()
if "testdb" in dblist:
print("testdab has already existed!")
(2) 創建集合
mycol = mydb["mycollection"]
判斷集合是否已經存在:
collist = mydb. list_collection_names()
if " mycollection " in collist:
print("mycollection existed!")
(3) 添加數據
在集合中插入一個文檔(記錄)的方法如下:
mydict = {"name": "jack"}
x = mycol.insert_one(mydict)
如果沒有指定 “_id”的值,會默認添加一個 '_id': ObjectId('5ee6e728228cbb51bb416a1c'),它是插入文檔的 “_id” 值。在沒有指定 “_id”時候,MongoDB 會爲每個文檔添加一個唯一的 id,所以一般可以自己指定這個“_id”的值。
插入多個文檔的方法如下:
mydict = [{ "name": "jack" }, {"name": "lucy"}]
x = mycol.insert_many(mydict)
指定_id輸入方法:
mydict = [{ "_id": "1", "name": "jack" }, {"_id": "2", "name": "lucy"}]
x = mycol.insert_many(mydict)
(4) 查詢數據
查詢第一條數據:
x = mycol.find_one()
查詢所有數據:
for x in mycol.find():
print(x)
使用find()查詢指定字段的數據
for x in mycol.find({},{ "_id": 0, "name": 1}):
print(x)
根據條件查詢:
myquery = { "name": "lucy" }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
還可以通過對查詢條件進行設置來實現高級查找。此處不再贅述。
如果要設置指定條數的記錄,可以這樣,只返回10條記錄
myresult = mycol.find().limit(10)
(5) 修改數據
使用update_one()可以修改一個文檔
myquery = { "name": "jack" }
newvalues = { "$set": { "name": "12345", "age": "12" } }
mycol.update_one(myquery, newvalues)
update_one() 方法只能修匹配到的第一條記錄,如果要修改所有匹配到的記錄,可以使用 update_many()。下面這個命令是將所有“name”字段以“l”開頭的文檔中的“age”設置爲“23”。
myquery = { "name": { "$regex": "^l" } }
newvalues = { "$set": { "age": "23" } }
x = mycol.update_many(myquery, newvalues)
(6) 數據排序
按照“_id”升序排列:
mydoc = mycol.find().sort("_id")
按照“_id”降序排列:
mydoc = mycol.find().sort("_id", -1)
(7) 刪除數據
刪除一個文檔:
myquery = { "name": "jack" }
mycol.delete_one(myquery)
刪除多個“name”字段以“N”開頭的文檔:
myquery = { "name": {"$regex": "^N"} }
x = mycol.delete_many(myquery)
4 總結
使用數據庫操作文檔數據,實現更加複雜的系統功能。本文只介紹了一些初步的操作知識,更加多的操作可以參考一些在線文檔。