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

xiaoxiao2022-07-05  97

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

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

转载请注明原文地址: https://www.6miu.com/read-4968459.html

最新回复(0)