问题描述
现在有一张表的数据如下图所示
比如我需要修改材料类别为“水泥”的材料名称,将所有的材料名称开头添加“水泥-”字符串,
如:第一条数据的材料名称为:“海螺水泥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(
{
材料类别:'水泥'
}
)
总结
这只是举一个简单的例子,而并不是实际应用场景,实际工作中可能遇到的会更复杂,如修改的字段是一个对象,对象里面的某个字段,这个代码就可以帮到你了。记得关注收藏哦~错过就找不到了。