如何更新mongodb文档字符串的一部分?

密码猴子

我的收藏如下:

  {
    "_id": 1,
    "integration_id": 222,
    "log_file": "/var/www/html/logs/posts/10608.log",
    "active": true,
    
  },
  {
    "_id": 2,
    "integration_id": 344,
    "log_file": "/var/www/html/logs/posts/10223.log",
    "active": true,
    
  },
  {
    "_id": 3,
    "integration_id": 124,
    "log_file": "/var/www/html/logs/posts/19178.log",
    "active": true,
    
  },
  {
    "_id": 4,
    "integration_id": 872,
    "active": true,
    
  }

我想更新存在的所有文档log_file,但是我只想更新日志文件的路径。例如/var/www/html/logs/posts/10608.log应该成为/new/path/to/log/10608.log

最终结果应为:

{
    "_id": 1,
    "integration_id": 222,
    "log_file": "/new/path/to/log/10608.log",
    "active": true,

  },
  {
    "_id": 2,
    "integration_id": 344,
    "log_file": "/new/path/to/log/10223.log",
    "active": true,
  }
...
...

我尝试从外壳运行此命令:

db.collection.find({
    log_file: {
        "$ne": null
    }
}).forEach(function(d, i) {
    d.log_file.replace("/var/www/html/logs/posts/", "/new/path/to/log/");
    db.collection.save(d);
})

但是什么也没发生。没有错误或任何形式的输出,并且没有任何更新。有人可以帮忙吗?

对于它的价值,我正在使用MongoDB Atlas。只是想把它放在那里,以防万一有人知道他们施加的这类操作有任何限制。

克里斯蒂安·弗里茨

我将使用$exists,也需要log_file将结果设置replacereplace未替换到位):

db.collection.find({
    log_file: {$exists: true}
}).forEach(function(d, i) {
    d.log_file = d.log_file.replace("/var/www/html/logs/posts/", "/new/path/to/log/");
    db.collection.save(d);
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章