【问题标题】:update _id in mongodb for entire collection为整个集合更新 mongodb 中的 _id
【发布时间】:2014-06-04 12:24:59
【问题描述】:

mongodb 中的新功能,我的要求是更新整个集合的 _id 字段,如下所示:

原文:_id: ObjectId("4cc45467c55f4d2d2a000002")

必填:_id: 4cc45467c55f4d2d2a000002

我想从整个集合的所有文档的开头截断'ObjectId("',从结尾截断'")'。

此外,我在类似的帖子中看到了以下内容,但它都是手动的

// 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")})

谢谢

【问题讨论】:

  • 为什么你需要这样做? MongoDB 使用 ObjectID 对象来识别记录。
  • 我认为您不能操纵文档的默认 ID。正如它所说,它是 mongodb 创建的一个 Object id,用于唯一标识集合中的每个文档。但是,如果您想自定义它,您可以创建自己的 id。您可以使用主机、服务器、时间、日期等的各种组合生成与 mongo 默认生成的 id 有点相似的 id。或者,如果您想要相同的内容,您可以按照自己的方法进行。获取对象 id,然后获取 Object_id.valueOf(),然后更新该文档
  • 你的问题真的没有意义。您要删除的 ObjectId("") 部分实际上不在您的文档中;当您查询时,它们只是在 shell 中显示为类型信息。

标签: mongodb mongodb-query


【解决方案1】:

MongodDB 根本不允许修改_id 字段。因此,一旦您创建了一个文档,就无法更改 _ids 的值。

如果您尝试更新_id,错误消息是:Mod on _id not allowed

如果您想更改_id 的值(正如您已经找到的那样),您必须将文档复制到变量中,更改_id,插入新文档并删除旧文档。没有其他办法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    相关资源
    最近更新 更多