2017-10-03 4 views
10

J'utilise Parse Dashboard pour la gestion des utilisateurs de mon application iOS. De plus, j'utilise des API externes qui utilisent la base de données MongoDB.Migration de petits ID d'analyse vers les ObjectID normaux de MongoDB

Le problème auquel je suis actuellement confronté est que l'utilisateur créé à partir de Parse Dashboard a un petit identifiant au lieu de ObjectID de MongoDB, et d'autres ressources qui ne sont pas sur-analysées sont générées par ObjectID normal.

par ex. utilisateur Objet:

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

document Objet:

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

Tâche Objet:

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

J'utilise aussi Keystone.js comme backend Administrateur Dashboard.So essentiellement en raison de ce mélange genre de relations ID à l'intérieur de K eyStone.js est cassé et Keystone.js est écrasé.

Je veux migrer tous mes petits ID existants à ObjectID normale MongoDB sans rupture des relations ou de toute autre procédure pas à pas, en fixant Keystone.js

+1

Isn » t-ce juste un script de mise à jour pour migrer les identifiants? Quelque chose comme https://stackoverflow.com/questions/4973095/mongodb-how-to-change-the-type-of-a-field – Veeram

+0

Comment est-il possible de changer le type d'un champ qui est la clé primaire dans MongoDB ! –

+1

Vous pouvez itérer sur la collection, vérifier le type de l'ID lorsque la chaîne supprime l'ID du document et insérer le document. Une fois que vous avez terminé d'insérer de nouveaux documents, vous pouvez supprimer en bloc tous les documents dont le type est une chaîne pour supprimer les anciens enregistrements. ex ici https://stackoverflow.com/questions/4012855/how-update-the-id-of-one-mongodb-document – Veeram

Répondre

1

Vous pouvez exécuter quelque chose comme ceci:

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" }});