Python MongoDB使用初步

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 總結

使用數據庫操作文檔數據,實現更加複雜的系統功能。本文只介紹了一些初步的操作知識,更加多的操作可以參考一些在線文檔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章