MongoDB - 使用迭代更新集合上的每个“_id”字段
Posted
技术标签:
【中文标题】MongoDB - 使用迭代更新集合上的每个“_id”字段【英文标题】:MongoDB - Update every "_id" field on a collection with an iteration 【发布时间】:2018-09-09 12:15:52 【问题描述】:我有一个从 PostgreSQL 导入的名为“inserogato”的庞大集合(68017 个文档)。 在 PostgreSQL 中,表“inserogato”的主键是“id”,但 MongoDB 创建一个名为“_id”的默认主键,其类型为 ObjectId。所以我想将字段“id”中的所有值复制到字段“_id”。
Some fields of a document
我试过了,但它只更新了一个文档:
db.inserogato.find("_id" : ObjectId("5abe1d264887072726b19b2e")).forEach(function(doc)
var oldId = doc._id;
doc._id = NumberLong(doc.id);
db.inserogato.remove( _id: oldId );
db.inserogato.save(doc);
);
【问题讨论】:
How update the _id of one MongoDB Document?的可能重复 【参考方案1】:Emanuele,您不能删除或编辑 MongoDB 集合的 _id。 如果这是您需要完成的任务,您将需要创建一个具有正确 ID 的新集合。
步骤:
-
复制集合(原件/副本)
删除原文
使用正确的 _id 重新创建原始文件
如果您想按照您的示例进行操作,则需要遍历所有集合(不要指定 _id)
db.inserogato.find().forEach(function(doc)
var oldId = doc._id;
doc._id = NumberLong(doc.id);
db.inserogato.remove( _id: oldId );
db.inserogato.save(doc);
);
【讨论】:
抱歉回复晚了!您的想法是正确的道路,但该代码仅适用于 8000 或 10000 个文档,但它给了我错误!按照这个想法,我找到了另一个解决方案!我只是编写了一个 Java 程序,它使用正确的 _id 重新创建原始集合,并且成功了!以上是关于MongoDB - 使用迭代更新集合上的每个“_id”字段的主要内容,如果未能解决你的问题,请参考以下文章
迭代mongoDB集合,为每个项执行聚合的异步任务,并且当它们全部完成时返回响应中的JSON