目錄:
4. [Database][MongoDB] 新增、修改、查詢、刪除操作 2 ( CRUD operation 2 )
4. [Database][MongoDB] 新增、修改、查詢、刪除操作 2 ( CRUD operation 2 )
前言:
在前一篇MongoDB CRUD1章節中,我們介紹mongo shell基本的操作與查詢指令,在本篇,我們接簡單介紹insert, update, remove與drop常用指令。
執行步驟:
Insert:MongoDB是以document的結構進行儲存,並沒有固定的綱要(schemaless),新增(Insert)的
過程中,若遇到新的欄位會自動建立(但並不是每筆資料都加上此欄位),比起關連式資料庫需要修改
資料結構,MongoDB更顯得有彈性。
基本指令如下:
db.people.insert({name:"alice",type:"student",age:20,array:[1,2,3,4,5]})
mongo shell 可以使用類似javascript的語法,您也可以使用下列方法輸入
var data = {name:"alan",type:"student",age:30,array:[6,7,8,9] } db.people.insert(data)

您可以使用前一章節學習的查詢指令進行查詢
db.people.find()
db.people.find().pretty()

Update:
注意:在執行update指令必須非常小心,若沒有使用$set的指令指定更新哪個欄位,
update指令會將整筆資料進行更動(沒加上的欄位就直接清掉了),會造成資料遺失。
此外,Update有需多參數可以使用:
$set, $inc, $unset, $push, $pop, $pushAll, $addToSet, upsert, multi
我們將一項一項介紹:
基本指令如下:
db.people.update( { "type" : "student"},{ "type" : "engineer"},{ multi:true} )

您會發現:"哇,我的第一筆符合type = student 怎麼只剩下type的欄位"
承如我們剛開始提到的,若沒有使用$set的指令指定更新哪個欄位 ,
update指令會將整筆資料進行更動(沒加上的欄位就直接清掉了),會造成資料遺失。
$multi
仔細再看看,怎麼只有更改第一筆資料呢?(算是不幸中的大幸?)
原因是是沒有使用multi:true指令,mongodb會預設只更動一筆資料。
db.people.update( { "type" : "student"},{ "type" : "engineer"},{ $multi:true} )

$set
我們將資料還原,使用$set指令進行調整
update alice's age = 30
db.people.update( { "name": "alice" },{ $set : { age :30} })

$inc
add 1 to alice's age
db.people.update( { "name": "alice" },{ $inc : { age : 1 } })

$unset
remove alice's age data
db.people.update( { "name": "alice" },{ $unset : { age : 1 } })

$upsert
以目前為例,alice的age資料已經被移除了,我們再一次$set更新age,會因為找不到
這個欄位,而無法更新。
db.people.update( { "name": "alice" },{ $set : { age :25} })

但如果我們給與$upsert:true指令,若找不到這個欄位,則會自動新增資料
db.people.update( { "name" : "alice" },{ $set : { age :25} } , { $upsert:true })

Array的操作:
$push
db.people.update( { "name" : "alice" },{ $push: { array: 10 } })

$pop
移除最後一個資料
db.people.update( { "name" : "alice" },{ $pop: { array: 1 } })

移除第一個資料
db.people.update( { "name" : "alice" },{ $pop: { array: -1 } })

$pushAll
db.people.update( { "name" : "alice" },{ $pushAll: { array: [7,8,9] } })

$pull
移除指定資料
db.people.update( { "name" : "alice" },{ $pull: { array: 5 } })

$addToSet
加入資料(與$push效果相同)
db.people.update( { "name" : "alice" },{ $addToSet: { array: 5 } })

Remove:
移除資料指令如下:
移除某些資料(name為alice都移除)
db.people.remove ( { "name": "alice" })

移除全部資料
db.people.remove ( { })

Drop:
刪除collection指令如下:
db.people.drop()

參考資料:
Mongodb官方網站--
謝謝!
0 留言