首页 文章

MongoDB - 使用迭代更新集合上的每个“_id”字段

提问于
浏览
1

我有一个巨大的集合(68017个文档),名为“inserogato”,从PostgreSQL导入 . 在PostgreSQL中,表“inserogato”的主键是“id”,但MongoDB使用ObjectId类型创建名为“_id”的默认主键 . 所以我想将字段“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);
});

1 回答

  • 0

    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);
    });
    

相关问题