专业编程基础技术教程

网站首页 > 基础教程 正文

MongoDB批量修改复杂数据案例分享

ccvgpt 2025-02-21 12:25:26 基础教程 8 ℃

问题描述

现在有一张表的数据如下图所示

比如我需要修改材料类别为“水泥”的材料名称,将所有的材料名称开头添加“水泥-”字符串,

MongoDB批量修改复杂数据案例分享

如:第一条数据的材料名称为:“海螺水泥5255”,则修改后为“水泥-海螺水泥5255”,如何实现?

以下是我个人的实现方式,有更好的实现方式还请在下方进行留言交流,感谢支持!

1、首先是查询,执行下面代码可以筛选出材料类别为水泥的所有数据

db.getCollection("TE_ActMaterial").find(
{
材料类别:'水泥'
}
)

2、通过forEach进行遍历每一条数据进行修改

这里说明一下,对于find后的结果可以调用forEach函数,此函数的参数是一个函数

forEach(function(item){}),item指find的结果集中的每一个对象。这里也支持es6箭头函数的写法forEach(item=>{})

下面代码可以打印出每条数据的材料名称:

db.getCollection("TE_ActMaterial").find(
{
材料类别:'水泥'
}
).forEach(function(item){//写法一
print(item['材料名称'])
})

db.getCollection("TE_ActMaterial").find(
{
材料类别:'水泥'
}
).forEach(item=>{//写法二,箭头函数
print(item['材料名称'])
})

3、通过update进行修改数据

update的语法规则为:update({},{}),第一个参数为指定修改什么数据,也就是条件;第二个参数表示修改什么字段。

如:

update(
{"_id":"xxxid"},
{
  $set:{
  字段名称:字段值
  }
}
)

那么上述需求就可以这样进行实现:

db.getCollection("TE_ActMaterial").find(
{
材料类别:'水泥'
}
).forEach(item=>{
db.getCollection("TE_ActMaterial").update(
{_id:item._id},
{
	$set:{
			材料名称:"水泥-"+item['材料名称']
	}
}
)
})

执行上述代码,修改数据后执行查询

db.getCollection("TE_ActMaterial").find(
{
材料类别:'水泥'
}
)


总结

这只是举一个简单的例子,而并不是实际应用场景,实际工作中可能遇到的会更复杂,如修改的字段是一个对象,对象里面的某个字段,这个代码就可以帮到你了。记得关注收藏哦~错过就找不到了。

最近发表
标签列表