如何通过MongoDB聚合修改字段字符串的指定子域名部分?
使用MongoDB聚合统一替换
four字段的子域名 要把集合里four字段的不同子域名统一换成https://cdn56-img.good-cdn.com/,可以用聚合管道的字符串处理操作来实现,具体步骤如下:
方法一:生成修改后的结果(可选写入新集合)
执行以下聚合命令,替换yourCollectionName为你的集合名:
db.yourCollectionName.aggregate([ { $addFields: { four: { $concat: [ "https://cdn56-img.good-cdn.com/", { $arrayElemAt: [ { $split: ["$four", ".good-cdn.com/"] }, 1 ] } ] } } }, // 可选:如果要把结果存到新集合,取消下面注释并替换集合名 // { // $out: "yourNewCollectionName" // } ])
各阶段说明:
$addFields:直接覆盖原four字段,生成新的URL$split:把原URL按.good-cdn.com/拆分,得到包含域名前缀和路径的数组$arrayElemAt:取出数组里的路径部分(索引为1的元素)$concat:把目标域名和路径拼接成最终的URL$out(可选):将修改后的所有文档写入指定的新集合
方法二:直接更新原集合文档
如果需要直接修改原集合里的文档,用$merge阶段替代$out:
db.yourCollectionName.aggregate([ { $addFields: { four: { $concat: [ "https://cdn56-img.good-cdn.com/", { $arrayElemAt: [ { $split: ["$four", ".good-cdn.com/"] }, 1 ] } ] } } }, { $merge: { into: "yourCollectionName", on: "_id", whenMatched: "replace" } } ])
$merge阶段说明:
into:指定要更新的目标集合(即原集合)on:用_id作为匹配条件,保证更新对应文档whenMatched: "replace":匹配到文档时,用聚合生成的新文档替换原文档
内容的提问来源于stack exchange,提问作者Tribe56123
相关产品推荐
相关产品推荐

