一、更新普通字段
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
是一个数组,urls
是attachments
里的数组,我们需要迭代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里对象的一个字段。
网友评论