【问题标题】:Insert MongoDB document with an objectId that existed in the past使用过去存在的 objectId 插入 MongoDB 文档
【发布时间】:2019-12-11 07:31:54
【问题描述】:

我有一堆集合 (12),我需要重命名其中的许多字段。我不能在数据库中进行,我所能做的就是下载并重新上传它的转储。

所以我已经下载了 mongodump 处理数据的集合,我打算使用 mongorestore 将其推回数据库。

我想知道 ObjectIds 会发生什么。我知道 objectId 在整个数据库中是唯一的,所以我正在考虑在使用 mongorestore 之前删除所有旧数据,是否可以,或者我仍然有问题有id吗?

【问题讨论】:

  • 为什么不能直播?有什么问题?
  • 我被要求离线工作,因为是生产数据库,据我所知没有技术限制。
  • 否则我会在字段上使用$rename,在集合上使用renameCollection
  • 正是因为它是生产和工作应用程序,您需要逐步执行应用程序本身的升级和迁移数据。

标签: mongodb mongorestore


【解决方案1】:

你可以为 MongoID 指定任何你想要的值。你甚至可以使用字符串代替 MongoID。

如果您有生产应用程序,您需要通过应用程序自己逐步执行升级和迁移数据。

如果您有一个进程单线程应用程序,或者您可以以这种方式运行您的应用程序 - 这是最简单的情况。否则你需要同步服务。

小心使用 async/await 和 Promise 等异步进程。他们一次接收数据并将其保存在内存中,并在另一时间继续处理该数据,并且需要牢记这一点。

你需要做的:

  • 修改服务以准备好两种数据格式

  • 创建将遍历所有数据并迁移的修改代码

  • 修改服务,以便在所有数据迁移完成后才准备好使用新的数据格式

【讨论】:

  • 也许我还没有说清楚:我不打算改变 objectIds 而是推回原来的那些
  • 这意味着你可以做任何事情,如果你有具有 id 的对象,你可以更新它,或者你可以删除并创建具有相同 id 的对象。等等。但很可能这根本不是好方法。更仔细地描述问题,使可能的社区更清晰,并根据您的问题解决任务。
猜你喜欢
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2016-01-20
  • 2012-09-19
  • 1970-01-01
  • 2013-11-11
  • 2018-09-20
  • 1970-01-01
相关资源
最近更新 更多