mongodb 修改新增內嵌陣列資料指令
阿新 • • 發佈:2018-12-20
mongodb複合查詢修改內嵌陣列指令
- 初始資料
下面是一個collection,名稱為 care_field 中的一條資料,集合包含多條資料。其中 baseFieldList 欄位為陣列複合屬性。
{ "_class" : "com.trendy.server.crm.api.care.po.CareFieldPo", "_id" : ObjectId("5bcd313ea8d5db9f9e95c67c"), "eventNo" : "OrderSuccess", "baseFieldList" : [ { "fieldName" : "會員姓名", "fieldValue" : "{customer_name}", "fieldMapper" : "memberName", "example" : "張三" }, { "example" : "普通會員", "fieldMapper" : "memberGradeId", "fieldName" : "會員等級", "fieldValue" : "{customer_grade}" }] }
- 需求
1.修改eventNo包含Order的所有資料,在baseFieldList 新增一個會員編號的複合屬性。
2.將所有baseFieldList中 fieldMapper = memberGradeId的值改為memberGradeName。
- 命令
update格式就不多贅述。第一個我們利用updateMany進行多行修改,$regex
模糊匹配,$addToSet
新增陣列就可以了。
db.getCollection('care_field').updateMany( {"eventNo":{"$regex":/Order/}}, {$addToSet: {baseFieldList:{ "fieldName" : "會員編號", "fieldValue" : "{customer_code}", "fieldMapper" : "memberNo", "example" : "53300976"} } },{"multi":true})
第二個利用baseFieldList.fieldMapper
查詢到子屬性為 memberGradeId 的資料,重點就在修改部分裡baseFieldList.$.fieldMapper
的$
號了,這裡指代所有的行,因為baseFieldList陣列如果很多無序的話,我們也不清楚每條資料中會員等級在baseFieldList是第幾個。
db.getCollection('care_field').updateMany( {"baseFieldList.fieldMapper":"memberGradeId"}, {$set:{"baseFieldList.$.fieldMapper":"memberGradeName"}}, {"multi":true})
- 總結
很多零散的知識點大家都曉得,可是網上很難找到多種複合查詢,修改內嵌陣列的案例。今天遇到一些資料修改需要,量級不算多,但還是情願把時間用在寫命令上,這樣也能夠保證生產資料修改的準確性。