将_id值从数字更改为ObjectId()?

时间:2014-05-27 15:46:43

标签: mongodb

我有一个集合(510个文档),其中_id是数字:

{    "_id" : "1",
    "name" : "eric" }

{    "_id" : "2",
    "name" : "tom" }
....

我希望将它们的值更改为ObjectId(),如下所示:

{    "_id" : ObjectId("53849e258bf3be07804a00d0"),
    "name" : "eric" }

{    "_id" : ObjectId("53849e388bf3be07804a00d1"),
    "name" : "tom" }
....

所以我试过了:

db.contacts.find().forEach(function(doc) {
    db.contacts.update(
        { "_id": doc._id },
        { "$set": { "_id": ObjectId()} }
    );
    })

但它不起作用,我得到了相似的结果:

Mod on _id not allowed

谢谢。

1 个答案:

答案 0 :(得分:3)

创建集合后,您无法更改集合中的_id(mongodb根本不允许)。但是,您可以复制_id对象execpt的完整内容,并将新_id添加到ObjectId并将其插入到您的集合中。之后,您可以删除_id为数字的所有对象。它有点复杂,但结果是一样的(并且有效)。

Have a look here