MongoDB 簡單上手

EnweTu發表於2018-09-28

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

相關文章