PJCHENder 未整理筆記

[Mongo] MongoDB 操作

2018-12-09

[Mongo] MongoDB 指令操作(CLI)

@(Database)[Mongo, NoSQL, cli]

1
2
3
4
5
6
# 啟動 MongoDB Shell
$ mongo # MacOS
"C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe" # Windows

# 離開 Mongo Shell
$ quit()

基本觀念

  • NoSQL: not only SQL
  • collection: 用來整理組織 document,類似 SQL 中的 table
  • document: 個別的紀錄(record),類似 SQL 中的 row
  • 在 MonoDB 中,有些欄位的內容可以是空的。
  • MongoDB 將資料儲存成 BSON 的文件,BSON 是一種以二進位(binary)方式來表徵 JSON 的方法,並且可以包含比 JSON 更多的資料類型。

基本指令

1
2
3
4
> help                 # 檢視常用指令
> show dbs # 檢視目前所有的 database
> show collections # 檢視當前 db 有的 collections
> db # 顯示當前所在資料庫

CRUD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
##
# Create
# db.collection.insertOne({})
# db.collection.insertMany([{}, {}])
##
db.Todos.insertOne({title: 'Hello Mongo'}) # 建立 document

##
# Read
# db.collection.find()
# db.collection.findOne()
# db.collection.count()
# db.collection.distinct()
##
db.Todos.count() # Todos 中有多少 documents

db.Todos.find() # 檢視某一 Collections 內所有的 documents
db.Todos.find({title: 'Create new Node course'}) # 檢視特定 document
db.Todos.find({_id: ObjectId("5c0beffdeb866557d13c0ef8")}) # 檢視特定 document

db.Todos.find().pretty() # 以格式化的方式列出 document
db.Todos.find().limit(2) # 指列出前兩筆 document
db.Todos.find().skip(2) # 忽略前兩筆資料
db.Todos.find().sort({title: 1}) # 排序資料,1 是 ascending,-1 是 descending

db.Todos.find({}, {_id: false, title: true}) # 指定要顯示或隱藏哪些 key 值
db.Todos.find({title: 'Create new Node course'}, {tag: false})

# 使用 $or$in operator
db.Todos.find({$or: [{title: 'Create new Node course'}], {title: 'Learn NodeJS'}}) # 使用 $or operator
db.Todos.find( { status: { $in: [ "A", "D" ] } } )

##
# Update
# db.collection.updateOne({}, {})
# db.collection.updateMany({}, {})
# db.collection.replaceOne()
# 第一個參數的物件稱作 update filter,類似 find
# 第二個參數的物件稱作 update action,透過 $set 可以更新內容
##
db.Todos.updateOne({_id: ObjectId("5c0beffdeb866557d13c0ef8")}, {$set: {tag: 'course', title: 'Learn Node JS'}})

##
# Destroy
# db.collection.deleteOnt()
# db.collection.deleteMany()
# db.collection.remove()
##
db.Todos.deleteMany({tags: 'course'}) # 刪除 tags 為 'course' 的 document
db.Todos.remove({}) # 刪除 Todos 中所有的 documents
  • db 指我們所在的資料庫
  • postcollection ,會在 insert document 之後被建立
  • {title: 'Hello Mongo'} 是所見建立的 document
  • 過去使用的 insert(), update() 寫法目前處於 deprecated 狀態,建議不要使用。

資料庫相關

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
db                # 顯示當前所在資料庫
show dbs # 顯示現有資料庫(database)
show collections # 顯示當前資料庫內所有的 collections
use [DatabaseName] # 使用此資料庫,如果該資料庫不存在則自動「建立」並使用

##
# 針對 database
##
db.getCollectionNames() # 顯示當前資料庫中的 collection 名稱
db.dropDatabase() # 刪除資料庫

##
# 針對 collection
##
db.Todos.drop() # 刪除 Todos 這個 collection
  • 在 MongoDB 中,如果該 database 不存在,MongoDB 會在第一次儲存資料到該 database 時建立該 database

載入 seed 檔

1
2
ls()               #  列出資料夾所有的檔案
load('./seed.js') # 載入 seed 檔

索引相關

1
2
3
db.Todos.getIndexes()    # 取得 Todos 這個 document 的索引
db.Todos.createIndex({title: 1}) # 建立索引,1 表示越來越大,2 表示越來越小
db.Todos.dropIndex('title_1') # 刪除索引

GUI

Robo3T @ RoboMongo

參考

掃描二維條碼,分享此文章