我想更新一个文档的_id MongoDB。我知道这不是一个很好的实践。但是由于某些技术原因,我需要更新它。但是,如果我尝试更新它,我有:如何更新一个MongoDB文档的_id?
> db.clients.update({'_id':ObjectId("4cc45467c55f4d2d2a000002")}, {'$set':{'_id':ObjectId("4c8a331bda76c559ef000004")}});
Mod on _id not allowed
并且不进行更新。我如何才能真正更新它?
如果该文档上的某个字段具有唯一索引,则会出现一个有趣的问题。在这种情况下,您的示例将失败,因为文档无法在唯一索引字段中插入重复值。您可以通过先执行删除来修复此问题,但这不是一个好主意,因为如果您的插入由于某种原因失败,您的数据将丢失。您必须删除索引,执行工作,然后恢复索引。 – skelly 2014-06-02 19:52:52
好点@skelly!我碰巧想到类似的问题,并在2小时前看到了您的新评论。所以这个修改id麻烦被认为是允许用户选择ID导致的内在问题? – RayLuo 2014-06-02 21:56:30
如果在'insert'行中出现'重复键错误',并且不担心提到的@skelly问题,最简单的解决方法是先调用'remove'行,然后调用'insert'行。 “doc”应该已经打印在屏幕上,因此对于简单的文档,它很容易恢复,即使插入失败也是最糟糕的情况。 – philfreo 2015-04-14 19:55:03