首页 文章

将类型从ObjectId更改为string

提问于
浏览
1

我的mongodb中有一些损坏的文件,所以我想写一个应该修复它的修复脚本 . 但是,它不起作用 .

db.History.find({_id:{ $type: "objectId" }}).forEach( function (x) {   
  x._id = x._id.valueOf(); // convert field to string
  db.History.replaceOne({BId:x.BId, "Version.Version": x.Version.Version}, x);
});

但我得到一个例外

无法执行脚本 . 错误:WriteError:_id字段无法从{_id:ObjectId('59cd189e6e5c9e1ca90b072c')}更改为{_id:“59cd189e6e5c9e1ca90b072c”} .

怎么做到呢?我现在在我的应用层中有一个例外,因为它无法将ObjectId字段反序列化为字符串 .

1 回答

  • 4

    文档的 _id 值是不可变的,因此您需要使用更正的 _id 值创建文档的新副本,然后删除原始文档 .

    所以类似于:

    db.History.find({_id:{ $type: "objectId" }}).forEach( function (x) {
      var oldId = x._id;
      x._id = x._id.valueOf(); // convert field to string
      db.History.insert(x);
      db.History.remove({_id: oldId});
    });
    

相关问题