You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB嵌套文档动态key下URI的IP替换方案咨询

解决方案

方法1:Mongo Shell 脚本(foreach 遍历处理)

适合小批量数据,逻辑直观易调试:

// 替换为你的ClearML集合名称
const collection = db.your_collection_name;

// 遍历所有包含execution.artifacts的文档
collection.find({ "execution.artifacts": { $exists: true } }).forEach(doc => {
  const artifacts = doc.execution.artifacts;
  // 获取artifacts下所有动态生成的键
  const artifactKeys = Object.keys(artifacts);
  
  // 逐个处理每个artifact的uri
  artifactKeys.forEach(key => {
    const oldUri = artifacts[key].uri;
    // 精准替换IP段,避免误匹配其他数字
    const newUri = oldUri.replace(/http:\/\/100\.com/g, 'http://200.com');
    artifacts[key].uri = newUri;
  });
  
  // 保存修改后的文档
  collection.updateOne(
    { _id: doc._id },
    { $set: { "execution.artifacts": artifacts } }
  );
});

方法2:聚合管道批量更新(MongoDB 4.2+ 推荐)

针对大批量数据,直接在服务器端完成处理,效率更高:

// 替换为你的ClearML集合名称
db.your_collection_name.updateMany(
  { "execution.artifacts": { $exists: true } },
  [
    {
      $set: {
        "execution.artifacts": {
          $arrayToObject: {
            $map: {
              input: { $objectToArray: "$execution.artifacts" },
              as: "artifact",
              in: {
                k: "$$artifact.k",
                v: {
                  uri: {
                    $replaceAll: {
                      input: "$$artifact.v.uri",
                      find: "http://100.com",
                      replacement: "http://200.com"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  ]
);

核心逻辑说明

  • 两种方法都先定位存在execution.artifacts的目标文档
  • 处理动态键时,通过$objectToArray(聚合)或Object.keys()(Shell)将嵌套对象转为键值对数组,遍历处理后再转回对象结构
  • 替换IP时使用精准匹配的字符串替换,确保只修改目标IP段

内容的提问来源于stack exchange,提问作者Clement Ruhm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:07:21