Миграция небольших идентификаторов парсинга в обычные идентификационные объекты MongoDB

Я использую Parse Dashboard для управления пользователями моего приложения iOS. Также я использую внешние API, которые используют базу данных MongoDB.

В настоящее время проблема заключается в том, что пользователь, созданный из Parse Dashboard, имеет небольшой идентификатор вместо ObjectID объекта MongoDB, а другие ресурсы, которые не являются синтаксическим выражением, генерируются обычным ObjectID.

например. Пользовательский объект:

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

Объект документа:

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

Объект задачи:

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

Я также использую Keystone.js в качестве панели Backend Admin Dashboard. Поэтому в основном из-за этого смешанного типа отношений ID внутри KeyStone.js ломается, и Keystone.js получает сбой.

Итак, я хочу перенести все мои существующие небольшие ID в обычные объекты ObjectIDs MongoDB, не нарушая связей или любого другого пошагового руководства, установив Keystone.js

Ответ 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" }});