【问题标题】:Converting Parse objectId to Mongo ObjectId?将 Parse objectId 转换为 Mongo ObjectId?
【发布时间】:2016-07-07 20:28:34
【问题描述】:

我正在尝试将数据从 Parse 迁移到一个使用 Mongo 作为其数据库的新项目(没有 Parse/Parse 服务器)。由于两个项目的架构不同,我手动编写了一个迁移脚本来实现这一点。

据我了解,Parse 似乎对其对象使用 10 个字符长的 ID(数字、小写字母和大写字母的组合),而 Mongo 使用 24 个字符长的 ID(12 个字节)以十六进制表示)。

现在,当将文档的数据从旧项目迁移到新项目时,我正在使用一个函数将 Parse ID 转换为唯一的 Mongo ObjectId(它将每个字符转换为 2 位十六进制值,然后用 4 个零填充 20 个字符的字符串)。

这是一个好方法吗?我避免使用 Mongo 的自动 ObjectId 生成,以防我需要重新迁移任何旧的 Parse 文档并在新数据库中找到匹配的文档。我知道在 Mongo 中自动生成的 ObjectIds 还嵌入了一些其他信息,例如创建日期,但我认为这并不重要,我可以使用我的自定义 ObjectId 生成器吗?但是,我不确定对性能的影响/如果我只是以错误的方式进行迁移。

【问题讨论】:

    标签: mongodb parse-platform migration


    【解决方案1】:

    我推荐的方法是让 Mongo 自动生成 id,然后将 Parse 的 id 存储在一个名为 parseID 的新字段中,以备将来需要时参考。

    例如:

    解析数据: "_id": ObjectId(1234567890), "title": "Mongo 迁移", "description": "从 Parse 迁移到 Mongo" 蒙哥数据: "_id": ObjectId(1ad83e4k2ab8e0daa8ebde7), //mongo 生成 "parseId":ObjectId(1234567890), "title": "Mongo 迁移", "description": "从 Parse 迁移到 Mongo"

    然后如果你以后需要在两个数据库之间匹配一个文档,你可以编写一个类似于 Parse.find({"_id": Mongo.parseId}) 的脚本.....

    【讨论】:

      【解决方案2】:

      MongoDB 默认使用_id 作为主键。 _id 必须是唯一的以避免冲突。您生成唯一 ObjectId 到 _id 的方式很好。只要它们是唯一的,您甚至可以减少 20 个字符的填充以节省空间。

      【讨论】:

      • 你确定吗?我遇到了这篇文章中描述的相同问题。我的非解析 mongo 抱怨 10 char 对象 id。
      猜你喜欢
      • 1970-01-01
      • 2012-03-12
      • 2018-02-20
      • 2016-07-09
      • 2016-09-25
      • 1970-01-01
      • 2018-02-13
      • 2016-12-02
      • 1970-01-01
      相关资源
      最近更新 更多