【问题标题】:Migration of Small Parse IDs to normal MongoDB's ObjectIDs将 Small Parse ID 迁移到普通 MongoDB 的 ObjectID
【发布时间】: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的更新脚本吗?类似stackoverflow.com/questions/4973095/…
  • 如何改变 MongoDB 中作为主键的字段的类型!
  • 您可以遍历集合;当字符串删除文档的 id 并插入文档时检查 id 的类型。插入新文档后,您可以批量删除 id 类型为字符串的所有文档以删除旧记录。前在这里stackoverflow.com/questions/4012855/…

标签: node.js mongodb parse-server keystonejs objectid


【解决方案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" }});

【讨论】:

    猜你喜欢
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2017-03-14
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    相关资源
    最近更新 更多