[Database] MongoDB 資料操作
前言
本篇紀錄MongoDB整合Python的pymongo及mongo shell進行資料庫操作,安裝方式參考本篇。
傳統SQL與MongoDB兩者對應關係
在操作MongoDB前需要了解兩者的對應關係,才能理解如何下操作指令
使用Pymongo
安裝pymongo
1 |
|
連接pymongo
連接MongoDB時,需使用PyMongo庫裡面的MongoClient
。一般來說,傳入MongoDB的host及port即可,其中第一個參數為主機位置(host),第二個參數為port(如果不傳參數,預設是27017)
1 |
|
純字串的連接方式
1 |
|
連接雲端的MongoDB
點擊Connect Instructions -> 選擇Connect Your Application -> 選擇程式語言,並複製下方指令
貼上剛才複製的指令,並將password替換成自己的用戶密碼
1
client = MongoClient("mongodb://tomchen:user_password@cluster0-shard-00-00-q0zkl.mongodb.net:27017,cluster0-shard-00-01-q0zkl.mongodb.net:27017,cluster0-shard-00-02-q0zkl.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true&w=majority")
建立/指定資料庫
MongoDB中可以建立多個資料庫,需要指定操作哪個資料庫。
以test資料庫為例:
方法1
1 |
|
方法2
1 |
|
建立/指定Collection
MongoDB中的collection對應傳統資料庫的table
建立students為collection名稱
方法1
1 |
|
方法2
1 |
|
新增資料
新增單筆資料
採insert_one()
方法
1 |
|
新增多筆資料
採insert_many()
方法,傳入一個陣列形式的資料結構
1 |
|
查詢
可以利用find_one()
或find()
方法進行查詢,其中find_one()
查詢得到的是符合條件的第一個結果。
如果查詢結果不存在,則會返回
None
查詢單一筆資料
如查詢name為Tom的資料
1 |
|
根據ObjectId來查詢
需要使用package-bson
裡面的objectid
1 |
|
查詢多筆資料
查詢多筆資料時,務必要在查詢的結果轉為list
1 |
|
條件查詢
大於的條件
在dic內使用$gt
作為篩選條件
1 |
|
小於的條件
在dic內使用$lt
作為篩選條件
1 |
|
配合正規表達式
在dic內使用$regex
作為篩選條件,如: 查詢名字以T開頭的學生資料
更新
方法一update()
使用update()
方法,如更新name為Tom的age:先指定查詢條件,再查詢該筆資料,修改年齡後呼叫update()
方法將原條件和修改後的資料傳入
1 |
|
回傳結果:
也可以使用$set
對資料進行更新
1 |
|
方法二: update_one()
和update_many()
是官方比較推薦的方法
update_one()
和update_many()
是官方比較推薦的方法,用法更加嚴謹
1 |
|
嚴謹的方法會回傳UpdateResult object
,而matched_count
和modified_count
屬性則是指獲得匹配的資料數量和更動的資料數量
另外的例子:
update_one()
指定查詢條件為age
大於20,更新條件為{'$inc': {'age': 1}}
,也就是age
加1,執行之後會將第一條符合條件的資料age
加1。
1 |
|
update_many()
1 |
|
回傳結果可看到所有資料都被更新
刪除
使用delete_one()
和delete_many()
方法指定刪除的條件,此時符合條件的資料會被刪除。
1 |
|
deleted_count
為被刪除的數量
使用Mongo Shell
mongo 是一個用來操作MongoDB的JavaScript介面,可以使用它來進行新增、刪除、修改、查詢資料庫中的資料,另外也可以進行資料庫管理。
連結本地
1 |
|
打開終端機執行mongo
以MongoDB Shell來連線到MongoDB。
上圖表示連結成功!
若無加上任何參數,
mongo
指令預設會連線到localhost: 27017
,如果要改變主機與連接埠,參考 mongo Shell Reference Page。
查看基本的操作說明
1 |
|
一開始進入 MongoDB Shell 時,可以執行help
來查看基本的操作說明
選擇 database
在輸入資料之前,先下use
指令來選擇目標database。
新增資料
MongoDB內新增資料採insert()
方法,所有儲存在collection中的 document都會有一個 _id
的field名稱作為 primary key,如果輸入資料時沒有加上這個 field,MongoDB 會自動產生一個 ObjectId
作為 _id
。
範例:
寫入一個名為students的collection
1 |
|
成功寫入!
如果遇到 collection 不存在的狀況,MongoDB 會自動建立這個 collection。在執行之後,會傳回一個
WriteResult
物件,nInserted
的值就是輸入資料的筆數
查詢資料
未指定條件
執行find()
不加任何查詢條件時,會列出該collection中所有的 documents。
1 |
|
查詢成功!
指定查詢條件
範例1
查詢某個物件
1 |
|
範例2
查詢某個物件下的特定物件,使用dot.
的方式取得。
1 |
|
範例3
也可以用於查詢陣列中的field值。
1 |
|
配合運算子查詢條件
範例1
大於條件
1 |
|
範例2
小於條件
1 |
|
多個查詢條件
做AND
運算
1 |
|
做OR
運算
1 |
|
排序查詢結果
讓查詢的結果依照 field 來排序,可以加sort()
方法,並且指定排序的 field名稱與排列方式,1:表遞增;-1:表遞減。
1 |
|
列出所有的collections
下方三行指令擇一
1 |
|
資料庫系統資訊
1 |
|