我有一个集合(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
谢谢。
答案 0 :(得分:3)
创建集合后,您无法更改集合中的_id
(mongodb根本不允许)。但是,您可以复制_id
对象execpt的完整内容,并将新_id
添加到ObjectId
并将其插入到您的集合中。之后,您可以删除_id
为数字的所有对象。它有点复杂,但结果是一样的(并且有效)。