web-dev-qa-db-fra.com

TYPESMORT: La migration Créer sur le nouveau projet ne reconnaît pas les entités - "Aucun changement de schéma de base de données n'a été trouvé - ne peut générer une migration."

J'ai du mal à créer la migration initiale pour un projet Nestjs-Typeorm-Mongo.
[.____] J'ai cloné Cet exemple de projet de Nestjs utilise Typeorm avec MongoDB . Le projet fonctionne dans le fait que lorsque je l'exécute localement après avoir mis un document "photo" dans mon Mongo local avec dB nommé "test" et collection "photos" puis je peux appeler à localhost: 3000/photo et recevoir les documents photo.

Maintenant, j'essaie de créer des migrations avec le CLI de typeorm à l'aide de cette commande:

./node_modules/.bin/ts-node ./node_modules/typeorm/cli.js migration:generate -n initial

... Mais ça ne marche pas. Je ne suis pas capable de créer une initiale de commodité, même après la définition "Synchroniser: False" dans mon app.module.ts Fichier J'ai toujours l'erreur:

Aucun changement de schéma de base de données n'a été trouvé - ne peut pas générer une migration. Pour créer une nouvelle utilisation vide d'utilisation de la migration vide "Migration de typeorm: Créer" commande lorsque vous essayez de générer une migration ... ????

Autre que de changer de synchronisation sur false, le seul autre changement que j'ai fait ajoutait d'ajouter un ormconfig.json Fichier dans la racine du projet en exécutant typeorm init --database mongodb:

{
   "type": "mongodb",
   "database": "test",
   "synchronize": true,
   "logging": false,
   "entities": [
      "src/**/*.entity.ts"
   ],
   "migrations": [
      "src/migration/**/*.ts"
   ],
   "subscribers": [
      "src/subscriber/**/*.ts"
   ],
   "cli": {
      "entitiesDir": "src",
      "migrationsDir": "src/migration",
      "subscribersDir": "src/subscriber"
   }
}
6
Jim

Une fois que vous utilisez MongoDB, vous n'avez pas de tables et n'avez pas besoin de créer vos collections à l'avance. Les schémas mongodb sont essentiellement créés à la volée!

Sous la hotte, si le pilote est mongodb, la commande typeorm migration:create est contourné de sorte qu'il est inutile dans ce cas. Vous pouvez vous enregistrer le PR # 3304 et numéro n ° 2867 .

Cependant, il existe une alternative appelée migrate-mongo qui permet d'archiver une manière incrémentielle, réversible et contrôlée par la version d'appliquer des changements de schéma et de données. C'est bien documenté et développé activement.

Exemple de migration-Mongo

Cours npm install -g migrate-mongo Pour l'installer.

Cours migrate-mongo init Pour installer l'outil Migration. Cela créera un migrate-mongo-config.js Fichier de configuration et un dossier Migration à la racine de notre projet:

|_ src/
|_ migrations/
   |- 20200606204524-migration-1.js
   |- 20200608124524-migration-2.js
   |- 20200808114324-migration-3.js
|- migrate-mongo.js
|- package.json
|- package-lock.json

Ton migrate-mongo-config.js Le fichier de configuration peut ressembler à:

// In this file you can configure migrate-mongo
const env = require('./server/config')
const config = {
  mongodb: {
    // TODO Change (or review) the url to your MongoDB:
    url: env.mongo.url || "mongodb://localhost:27017",

    // TODO Change this to your database name:
    databaseName: env.mongo.dbname || "YOURDATABASENAME",

    options: {
      useNewUrlParser: true, // removes a deprecation warning when connecting
      useUnifiedTopology: true, // removes a deprecating warning when connecting
      //   connectTimeoutMS: 3600000, // increase connection timeout up to 1 hour
      //   socketTimeoutMS: 3600000, // increase socket timeout up to 1 hour
    }
  },

  // The migrations dir can be a relative or absolute path. Only edit this when really necessary.
  migrationsDir: "migrations",

  // The MongoDB collection where the applied changes are stored. Only edit this when really necessary.
  changelogCollectionName: "changelog"
};
module.exports = config;

Cours migrate-mongo create name-of-my-script Pour ajouter un nouveau script de migration. Un nouveau fichier sera créé avec un horodatage correspondant.

/*
|_ migrations/
   |- 20210108114324-name-of-my-script.js
*/

module.exports = {
    function up(db) {
        return db.collection('products').updateMany({}, { $set: { quantity: 10 } })
    }
    
    function down(db) {
        return db.collection('products').updateMany({}, { $unset: { quantity: null } })
    }
}

la base de données ChangeLog: Pour connaître la version actuelle de la base de données et quelle migration doit s'appliquer ensuite, une collection spéciale stocke la base de données de base de données avec des informations telles que les migrations appliquées et la suivante .

enter image description here

Pour exécuter vos migrations, exécutez simplement la commande: migrate-mongo up

Vous pouvez trouver un exemple complet dans cet article migrations de schéma Mongodb dans Node.Js

3
Willian