当前位置:
首页
文章
数据库
详情

MongoDB字符串替换

一、更新普通字段

1.1 样例
db.dynamic.updateMany(
  {member_icon:{"$exists":true}},
  [{
    $set: {member_icon: {
      $replaceOne: { input:"$member_icon", find:"oss-cn-shenzhen.aliyuncs.com", replacement:"oss.alanchen.com" }
    }}
  }]
);
1.2 说明

1、第一部分{member_icon:{"$exists":true}}是匹配查询,用于过滤要更新的文档,并且该位置可以加快查询速度。

2、第二部分($set: { member_icon: {...)是更新聚合管道(请注意方括号表示使用聚合管道)

  • $set是新的聚合运算符(Mongo 4.2),在这种情况下,它将替换字段的值。
  • 用新的$replaceOne运算符计算新值。注意member_icon如何根据其自身的值($member_icon)直接修改。

二、更新数组

2.1 样例
db.dynamic.updateMany(
  {"attachments.urls":{"$exists":true}},
  [{
    $set: {
      "attachments.urls": {
        $map: {
          input: "$attachments.urls",
          in: {
            $replaceOne: {
              input: "$$this",
              find: "oss-cn-shenzhen.aliyuncs.com",
              replacement: "oss.alanchen.com"
            }
          }
        }
      }
    }
  }]
);
2.2 说明

attachments是一个数组,urlsattachments里的数组,我们需要迭代attachments.urls数组的循环并替换urls$map迭代attachments.urls数组的循环,$replaceOne替换字符串。

三、更新数组里的对象字段

3.1 样例
db.dynamic.find({"attachments.url":{"$exists":true}})
    .sort({
        _id: -1
    }).forEach( function(item) {

     item.attachments.forEach(function(e) {
        e.url =  e.url.replace('oss-cn-shenzhen.aliyuncs.com','oss.alanchen.com');
     })
     db.getCollection("dynamic").update({_id:item._id},{$set:{attachments: item.attachments}});
 });
3.2 说明

ttachments是一个数组,url是attachments里对象的一个字段。

参考资料
在mongodb中的字符串数组中查找和替换

MongoDB通过forEach循环实现Replace

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。