MongoDB 入門 (5) MongoDB 修飾子

之前展示了如何使用 update 更新文件的內容,你可能會問一個問題,我要更新文件的內容時一定要先產生一個新的文件再把舊的文件更新嗎?假設我只想更新一個特定的屬性有沒有更好的辦法?答案就是使用修飾子 (Modifier)。

1. "$inc" 修飾子:

> db.dogs.update({"name":"doggy"}, {"$inc":{"age":10}})
> db.dogs.updateMany({"name":"doggy"}, {"$inc":{"age":10}})
> db.dogs.updateMany({"name":"doggy"}, {"$inc":{"age":-10}})

假設你有多個 "doggy" 的資料,update 只會選一個來更新,若想更新多個就要用 updateMany。

假設 "$inc" 的鍵不存在的話會自動新增該鍵並用增加的值當作初始值。


2. "$set" 修飾子:

> db.dogs.findOne({"age":30})
> db.dogs.update({"_id":ObjectId("5a34ab46c486a947ad4d5664")}, {"$set": {"age":25}})

這邊先用 findOne 回傳一個符合條件的 ObjectId,ObjectId 類似身份證號碼是獨一無二的存在,最後再用 "$set" 設定 "age" 的值。


3. "$push" 修飾子:

"$push" 會以陣列的方式加入新的值:

> db.dogs.update({"age": 25}, {"$push": {"favorite": "beef"}})
> db.dogs.update({"age": 25}, {"$push": {"favorite": "chicken"}})

4. "$ne" 修飾子:

若 "favorite" 不存在 "chicken",就新增 "chicken" 到 "favorite":

> db.dogs.update({"favorite":{$ne:"chicken"}}, {"$push": {"favorite":"chicken"}})

5. "$addToSet" 修飾子:

> db.dogs.update({"name":"white"}, {"$addToSet": {"favorite": "chicken"}})
> db.dogs.update({"name":"white"}, {"$addToSet": {"favorite": "chicken"}})

"$addToSet" 會先檢查 "favorite" 有沒有 "chicken",沒有就會加入 "chicken",有則不會重複加入


6. "$each" 修飾子:

"$each" 可以一次處理一堆值

搭配 "$addToSet" 再把一堆值中沒有出現的值加進去:

>db.dogs.update({"name":"white"}, {"$addToSet": {"favorite": {"$each": ["pork", "beef"]}}})

這行我自己都覺得看起來很複雜...


7. "$pop" 修飾子:

>

留言

熱門文章