1. 程式人生 > >mongodb 修改新增內嵌陣列資料指令

mongodb 修改新增內嵌陣列資料指令

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})
  • 總結

很多零散的知識點大家都曉得,可是網上很難找到多種複合查詢,修改內嵌陣列的案例。今天遇到一些資料修改需要,量級不算多,但還是情願把時間用在寫命令上,這樣也能夠保證生產資料修改的準確性。