Mongodb 将类型从ObjectId更改为string

Mongodb 将类型从ObjectId更改为string,mongodb,Mongodb,我的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);

我的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:无法将{u id: ObjectId('59cd189e6e5c9e1ca90b072c')到{u id: “59cd189e6e5c9e1ca90b072c”}


怎样才能做到呢?现在我的应用程序层出现了一个异常,因为它无法将ObjectId字段反序列化为字符串。

文档的
\u id
值是不可变的,因此您需要使用更正的
\u 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});
});

文档的
\u id
值是不可变的,因此需要使用更正的
\u 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});
});

我只是在插入之前删除文档,因为否则它会违反某些唯一键。我想最好是交换最后两行。我只是在插入之前删除文档,因为否则它会违反一些唯一键。我想最好还是换掉最后两行。