在MongoDB中替换IP

inn6fuwd  于 2023-03-22  发布在  Go
关注(0)|答案(1)|浏览(126)

我有一个mongoDB集合的嵌套模式。它看起来像这样:

{
   "_id":"61d99bf5544f4822bd963bda0a9c213b",
   "execution": {
        "test_split":0,
        "artifacts":{
            "9ed39_output": {
                "uri": "http://100.com/somefile"
            },
            "8d777_output":{
                "uri": "http://100.com/anotherfile"
            }
        }
    }
}

请注意,工件键是唯一的。我需要替换存储在uri中的ip(在这个虚拟示例中为“100”)与其他一些ip(假设为“200”)。我需要编写一些findforeach。但我真的被“工件”下的变量键弄糊涂了。任何帮助都非常感谢。谢谢
数据库是ClearML的一部分。这里有一个如何更改模型位置的示例:但是https://clear.ml/docs/latest/docs/faq/#relocate_models我不能成功地将这个相当简单的模式应用到这个用例中。

qij5mzcb

qij5mzcb1#

不完全清楚你喜欢修改文档的一般程度。原则上你可以这样做:

db.collection.aggregate([
   { $set: { "execution.artifacts": { $objectToArray: "$execution.artifacts" } } },
   {
      $set: {
         "execution.artifacts": {
            $map: {
               input: "$execution.artifacts",
               in: {
                  k: "$$this.k",
                  v: {
                     uri: {
                        $replaceOne: {
                           input: "$$this.v.uri",
                           find: "100.",
                           replacement: "200."
                        }
                     }
                  }
               }
            }
         }
      }
   },
   { $set: { "execution.artifacts": { $arrayToObject: "$execution.artifacts" } } },
])

Mongo Playground
也许你需要在$replaceOne部分做一些增强。也许你需要正则表达式,或者你可以$split字符串,替换一个元素,然后用$reduce再次连接数组。

相关问题