将Parse objectId转换为Mongo ObjectId?

时间:2016-07-07 20:28:35

标签: mongodb parse-platform migration

我试图将数据从Parse迁移到使用Mongo作为其数据库的新项目(没有Parse / Parse Server)。由于两个项目之间的模式不同,我手动编写迁移脚本来实现此目的。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

例如:

PARSE DATA:

   "_id": ObjectId(1234567890),
   "title": "Mongo Migrate", 
   "description": "Migrating from Parse to Mongo"



MONGO DATA:

   "_id": ObjectId(1ad83e4k2ab8e0daa8ebde7), //mongo generated
   "parseId":ObjectId(1234567890),
   "title": "Mongo Migrate", 
   "description": "Migrating from Parse to Mongo"

然后,如果您以后需要在两个数据库之间匹配文档,则可以编写一个与Parse.find({“_ id”:Mongo.parseId})......

答案 1 :(得分:0)

MongoDB默认使用_id作为主键。 _id必须是唯一的以避免碰撞。您生成_id唯一ObjectId的方式很好。只要它们是独一无二的,您甚至可以减少20个字符的打击垫以节省空间。