【问题标题】:Change _id value from a number to ObjectId()? [duplicate]将 _id 值从数字更改为 ObjectId()? [复制]
【发布时间】:2014-07-16 14:51:48
【问题描述】:

我有一个集合(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

谢谢。

【问题讨论】:

标签: mongodb


【解决方案1】:

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

Have a look here.

【讨论】:

    猜你喜欢
    • 2018-06-25
    • 2017-07-22
    • 2021-03-18
    • 2022-01-19
    • 2018-03-21
    • 1970-01-01
    • 2013-09-22
    • 2021-06-30
    • 2017-10-09
    相关资源
    最近更新 更多