2013-06-17 4 views
2

J'utilise Mongoid comme mon wrapper DB. J'avais un modèle sans héritage et des milliers de documents dans la collection. Je l'ai ensuite refactorisé pour hériter d'une classe de base. Maintenant, je ne peux pas récupérer les données d'origine. Je ne le vois pas en interrogeant la classe ou la classe de base.Récupérer la collection MongoDB existante après avoir ajouté l'héritage

Comment dois-je gérer ce changement? Je vois que Mongoid autorise l'héritage et va stocker tous les documents dans la collection parent, puis ajouter un champ "_type" pour la différenciation de type. Dois-je migrer les données vers une collection temporaire, déployer le changement de code, puis migrer les données temporaires vers la nouvelle collection de base et définir le champ _type?

Merci

Répondre

1

Nous avons décidé de faire une copie du contenu de la production à ma db locale. Copiez ensuite les documents dans la nouvelle collection de classes de base et vérifiez que le type _type est défini. Puis finalement le restaurer en production.

+0

Comment avez-vous copié les documents dans la nouvelle classe de base? – cilphex

+1

Après avoir importé la collection, vérifiez qu'elle a un champ _type. Sinon, vous pouvez le définir avec 'db. .update ({'_type': null}, {$ set: {'_type': ""}}, {multi: true}); ' Ensuite, copiez-les finalement dans la nouvelle classe de base collection avec: 'db. .copyTo (""); ' –

Questions connexes