如何更新一个MongoDB文档的_id?

我想更新一个文档的_id MongoDB。 我知道这不是一个很好的实践。 但是由于某些技术原因,我需要更新它。 但是,如果我尝试更新它,我有:

> db.clients.update({'_id':ObjectId("4cc45467c55f4d2d2a000002")}, {'$set':{'_id':ObjectId("4c8a331bda76c559ef000004")}}); Mod on _id not allowed 

而更新不是。 我怎样才能真正更新它?

你不能更新它。 您必须使用新的_id保存文档,然后删除旧的文档。

 // store the document in a variable doc = db.clients.findOne({_id: ObjectId("4cc45467c55f4d2d2a000002")}) // set a new _id on the document doc._id = ObjectId("4c8a331bda76c559ef000004") // insert the document, using the new _id db.clients.insert(doc) // remove the document with the old _id db.clients.remove({_id: ObjectId("4cc45467c55f4d2d2a000002")}) 

要做到这一点,你也可以使用一个循环(基于Niels的例子):

 db.status.find().forEach(function(doc){ doc._id=doc.UserId; db.status_new.insert(doc); }); db.status_new.renameCollection("status", true); 

在这种情况下,UserId是我想要使用的新ID