MongoDB - 更新每个" _id"带有迭代的集合上的字段

时间:2018-03-30 12:43:52

标签: mongodb mongodb-query

我有一个名为" inserogato"的大集合(68017个文档),从PostgreSQL导入。 在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);
}); 

1 个答案:

答案 0 :(得分:0)

Emanuele,您无法删除或编辑MongoDB集合的_id。 如果这是你需要完成的,你需要创建一个具有正确id的新集合。

步骤:

  1. 复制集合(原件/复印件)
  2. 删除原始
  3. 使用正确的_id
  4. 重新创建原件

    如果您想关注您的示例,则需要遍历所有集合(不要指定_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);
    });