MongoDB 是什麼
MongoDB 是一種非關係型資料庫(NoSQL)。
MongoDB中的術語解釋
-
文件(document):形如
{ name: "sue", <---- field: value age: 26, <---- field: value status: "A" <---- field: value groups: [ "news", "sports" ] <---- field: value }
的一條記錄,就叫文件。文件由field and value pairs
組成,與JSON物件相似。- 區分大小寫
- field唯一 , 不可重複
- 文件可巢狀
- 鍵值對是有序的
-
集合:集合就是一組文件
SQL 與 MongoDB 術語比較
SQL術語 | MongoDB術語 | 解釋說明 |
---|---|---|
database | database | 資料庫 |
table | collection | 表、集合 |
row | document | 記錄、文件 |
column | field | 欄位、域 |
index | index | 索引 |
table joins | 表連線、MongoDB不支援 | |
primary key | primary key | 主鍵、MongoDB自動將_id欄位設定為主鍵 |
安裝 MongoDB
具體因版本不同,不宜贅述,最好參考官方文件。
連線 MongoDB 資料庫
連線資料庫前你需要確認:
- 你已經成功安裝MongoDB,並啟動了MongoDB服務。
- 你將MongoDB安裝目錄下的
bin
資料夾路徑新增到了環境變數中。 - 在 cmd 中輸入 mongo ,回車。然後就可以看到MongoDB shell 形式的客戶端。
MongoDB shell 中使用命令
MongoDB shell 支援JS語法,可直接書寫JS語句。
-
show dbs 顯示所有資料庫
-
use dbname MongoDB 不需要單獨的語句建立資料庫,
直接使用就行。若資料庫存在,則使用;否則建立之後使用。 -
db 顯示當前所在資料庫
> stu = {
... name: `jhon`,
... age:21}
{ "name" : "jhon", "age" : 21 }
- 通過上述語句可以建立一個stu物件
> db.students.insert(stu)
WriteResult({ "nInserted" : 1 })
> db.students.insert({name: `Amy`})
- 這樣將物件新增進資料庫
查詢
> db.students.find()
{ "_id" : ObjectId("5ba9dfb9e840eb1e9186871e"), "name" : "jhon", "age" : 21 }
> db.students.findOne()
{
"_id" : ObjectId("5ba9dfb9e840eb1e9186871e"),
"name" : "jhon",
"age" : 21
}
“_id”是MongoDB預設增加的,用來唯一標識一個文件
修改
- 直接修改,會替換原資料,無法進行單個key-value的更改
> db.students.update({name: `jhon`},{name: `jhonc`})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.students.findOne()
{ "_id" : ObjectId("5ba9dfb9e840eb1e9186871e"), "name" : "jhonc" }
可以看到 age 屬性也沒有了。
- 通過物件修改
> stu_obj = db.students.findOne({name: "Amy2"})
{
"_id" : ObjectId("5ba9e3eee840eb1e91868720"),
"name" : "Amy2",
"age" : 16,
"sex" : "male"
}
> stu_obj.name = "Jhon2"
Jhon2
> db.students.update({name: "Amy2"}, stu_obj)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> stu_obj = db.students.findOne({name: "Amy2"})
null
> stu_obj = db.students.findOne({name: "Jhon2"})
{
"_id" : ObjectId("5ba9e3eee840eb1e91868720"),
"name" : "Jhon2",
"age" : 16,
"sex" : "male"
}
刪除
> db.students.remove({name: "Jhon2"})
刪除單條
> db.students.remove({ })
清空
使用Python操作MongoDB資料庫
安裝 pymongo
from pymongo import MongoClient
import datetime
# 連線資料庫
client = MongoClient() # 會連線到預設地址和埠,即 127.0.0.1:27017
# # 也可以寫成這樣
# client = MongoClient(`localhost`, 27017)
# client = MongoClient(`mongodb://localhost:27017/`)
# 建立資料庫
db = client.test_database # 建立名叫 test_database 的資料庫
# # db = client[`test-database`]
# 增加文件
# 建立一條文件
post = {"author": "Mike",
"text": "My first blog post!",
"tags": ["mongodb", "python", "pymongo"],
"date": datetime.datetime.utcnow()}
# 將post新增到資料庫,並獲得"_id"
post_id = db.posts.insert_one(post).inserted_id