iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
Software Development

NoSQL: Not Only SQL系列 第 21

[Day 21] Document Database: 以 MongoDB 為例

  • 分享至 

  • xImage
  •  

接續昨天的進度,現在已經建立好本機環境了,就開始練習基本操作吧!

基本操作

首先先連進Container,並以昨天建立好的帳號與資料庫連線。

> docker exec -ti ironman-mongodb-demo bash
# mongosh --port 27017 -u "appUser" -p
(輸入密碼)
test>

接著切換到昨天建立的 demodb 資料庫。

test> use demodb
demodb>

建立 Collection

透過 db.createCollection("名稱") 來建立 Collection。建立時有許多參數可以設定,如果有要設定參數的話要多帶第二個參數 db.createCollection("名稱", 設定)

demodb> db.createCollection("defaultSettingCollection")

操作成功會得到 ok

{ ok: 1 }

可以使用 db.getCollectionNames() 查看已建立的 Collection 名稱,來確認剛剛的操作是否成功。

demodb> db.getCollectionNames()
[ 'defaultSettingCollection' ]

建立 Document

建好 Collection 就可以開始往裡面新增 Document 了,使用db.Collection名稱.insert(你的Document)。MongoDB 的 Document 都有一個作為識別的 _id,如果你的 Document 中包含這個欄位,資料庫使用你指定的值,若你沒有提供這個欄位,資料庫會自行生產一個不重複的值作為 _id

新增一筆不指定 ID 的 Document,

demodb> db.defaultSettingCollection.insertOne({"name":"item1","price":23.1})

成功會回傳 ack 為 true,以及作為識別的 ID。

{
  acknowledged: true,
  insertedId: ObjectId("632dc0969060f811b94ccab5")
}

新增一筆指定 ID 的 Document,

demodb> db.defaultSettingCollection.insertOne({"_id": "custId_1", "name":"item1","price":23.1})

成功的回傳就會看到這邊的 insertedId 是剛剛指定在 Document 中的 custId_1

{ acknowledged: true, insertedId: 'custId_1' }

修改 Document

Collection 中有 Document 後,就可以針對該 Document 進行修改。使用 db.Collection名稱.updateOne(過濾條件, 修改內容) 進行修改。

demodb> db.defaultSettingCollection.updateOne(
    { "_id":ObjectId("632dc0969060f811b94ccab5") },
    { $set: { "price":15 }}
)

得到成功的結果,裡面會包含異動 Document 數量的統計。

{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}

刪除 Document

接著把剛剛建的兩筆資料刪除其中一筆,使用 db.Collection名稱.deleteOne(過濾條件) 進行操作。

demodb> db.defaultSettingCollection.deleteOne(
    { "_id":ObjectId("632dc0969060f811b94ccab5") }
)

得到成功的結果,裡面會包含刪除的 Document 數量。

{ acknowledged: true, deletedCount: 1 }

查詢 Document

透過 db.Collection名稱.find() 列出目前 Collection 中所有的 Document。

demodb> db.defaultSettingCollection.find()

這時結果應該剩下一筆資料。

[ { _id: 'custId_1', name: 'item1', price: 23.1 } ]

如果有查詢條件,可以帶在參數中 db.Collection名稱.find(過濾條件)

dbmodb> db.defaultSettingCollection.find({ "_id":"custId_1" })

得到查詢結果。

[ { _id: 'custId_1', name: 'item1', price: 23.1 } ]

也可以使用非 _id 欄位進行查詢,

dbmodb> db.defaultSettingCollection.find({ "price":23.1 })

得到查詢結果。

[ { _id: 'custId_1', name: 'item1', price: 23.1 } ]

如果查詢不到結果,

dbmodb> db.defaultSettingCollection.find({ "name":"not exist name" })

得到的會是空白。



上一篇
[Day 20] Document Database: 以 MongoDB 為例
下一篇
[Day 22] Document Database: 以 MongoDB 為例
系列文
NoSQL: Not Only SQL30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言