mongodb 修改添加内嵌数组数据指令

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yyoc97/article/details/83347769

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})
  • 总结

很多零散的知识点大家都晓得,可是网上很难找到多种复合查询,修改内嵌数组的案例。今天遇到一些数据修改需要,量级不算多,但还是情愿把时间用在写命令上,这样也能够保证生产数据修改的准确性。

猜你喜欢

转载自blog.csdn.net/yyoc97/article/details/83347769
今日推荐