新增欄位
新增欄位目前我都使用 $set
居多,已經很少在用 $addFields
使用其他欄位的資料
在實務上我們很常有類似的需求或查詢,根據已經存在的資料中的欄位A,經過運算後存在欄位B,例如:
1 | { |
在功能上線後,發現某個頁面只需要呈現完整名字,也就是 FirstName + 空格 + LastName
,礙於一些”特殊”原因,只需要在資料庫中儲存成一個欄位,如下:
1 | { |
這時候要上個 Data Patch 將所有資料改成上述格式該怎麼做?
思路
- 取出 LastName, FirstName 組合在一起
- 寫入該筆資料
- 刪除 LastName, FirstName
這邊的關鍵語法應該是 Signle Dollar sign $
的使用,例如我們要使用已存在的欄位就是 $field
,於是就能夠完成組合的語法囉!
1 | '$concat': ['$LastName' , ' ' , '$FirstName' ] |
完整語法:
1 | db.test.update( |
刪除欄位
這邊直接演示刪除 LastName
, FirstName
1 | db.test.update( |
$switch 的使用
這邊我們結合了上面的內容,想要替這些員工加上一個 Level
欄位,此欄位是透過 Seniority
來做判斷,如果都不符合的話會進入 default
條件。(這只是範例,條件並沒有全部涵蓋喔!!)
1 | db.test.updateMany({"Seniority": {$exists:true}}, |
補充:
可以使用 update
語法,記得去掉 [ ]
以及加上 , { multi:true }
。
基本上學會使用其他欄位後,就能夠任意搭配其他語法,端看需求是什麼了。
1 | murmur...MQL 偵錯有點辛苦,同樣功能的語法又有不同寫法 |