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"
}
}
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 .
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