将 Small Parse ID 迁移到普通 MongoDB 的 ObjectID

Posted

技术标签:

【中文标题】将 Small Parse ID 迁移到普通 MongoDB 的 ObjectID【英文标题】:Migration of Small Parse IDs to normal MongoDB's ObjectIDs 【发布时间】:2018-03-14 11:27:59 【问题描述】:

我正在使用 Parse Dashboard 来管理我的 ios 应用程序的用户。此外,我正在使用使用 MongoDB 数据库的外部 API。

我目前面临的问题是从 Parse Dashboard 创建的用户的 id 较小,而不是 MongoDB 的 ObjectID,而其他未过度解析的资源是由普通 ObjectID 生成的。

例如。 用户对象:


_id:"qVnyrGynJE",
user_name:"Aditya Raval"

文档对象:


_id:"507f191e810c19729de860ea",
doc_name:"Marksheet",
user:"qVnyrGynJE"

任务对象:


_id:"507f191e810c19729de860ea",
task_name:"Marksheet",
user:"qVnyrGynJE"

我还使用 Keystone.js 作为后端管理仪表板。所以基本上由于 KeyStone.js 内部的这种混合类型的 ID 关系被破坏并且 Keystone.js 崩溃了。

所以我想通过修复 Keystone.js 将所有现有的小 ID 迁移到普通的 MongoDB ObjectID 而不破坏关系或任何其他演练

【问题讨论】:

这不就是一个迁移id的更新脚本吗?类似***.com/questions/4973095/… 如何改变 MongoDB 中作为主键的字段的类型! 您可以遍历集合;当字符串删除文档的 id 并插入文档时检查 id 的类型。插入新文档后,您可以批量删除 id 类型为字符串的所有文档以删除旧记录。前在这里***.com/questions/4012855/… 【参考方案1】:

你可以这样运行:

var users = db.Users.find();

for(var i = 0; i < users.length(); i++)

    var oldId = users[i]._id;
    delete users[i]._id;
    db.Users.insert(users[i], function(err, newUser) 
            db.Documents.updateMany("user": oldId, $set:  "user": newUser._id );
            //Do this for all collections that need to be update.
        );
    );


db.Users.deleteMany(_id:  $type: "string" );

【讨论】:

以上是关于将 Small Parse ID 迁移到普通 MongoDB 的 ObjectID的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 迁移后访问上传到 Parse.com 的文件 [关闭]

将 Objective-C iOS 应用程序迁移到自托管 Parse-Server 的问题

如何在 Parse.com 中验证 deviceToken 的 GCM 发件人 ID

从 Parse 迁移到 AWS Dynamo DB

Parse Image + Parse httpRequest 替换——从 Parse Cloud Code 迁移到 Parse Server on Node (Heroku / AWS / DO)

解析云代码迁移后如何更新到最新版本的 Parse-SDK-JS