فهرست منبع

modify migration file

yuto-o 4 سال پیش
والد
کامیت
1da3f91840
1فایلهای تغییر یافته به همراه31 افزوده شده و 27 حذف شده
  1. 31 27
      packages/app/src/migrations/20210921173042-add-is-trashed-field.js

+ 31 - 27
packages/app/src/migrations/20210921173042-add-is-trashed-field.js

@@ -11,46 +11,50 @@ module.exports = {
     logger.info('Apply migration');
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
 
-    const pages = await Page.find({});
+    const deletedPages = await Page.find({ status: Page.STATUS_DELETED });
+    const deletedPageList = deletedPages.map(deletedPage => deletedPage._id);
 
 
-    // create requests for bulkWrite
-    const requests = pages.map((page) => {
-      return {
+    const addFieldRequests = [
+      {
         updateMany: {
         updateMany: {
-          filter: { relatedPage: page._id },
-          update: { $set: { isPageTrashed: page.status === Page.STATUS_DELETED } },
+          filter: { relatedPage: { $in: deletedPageList } },
+          update: { $set: { isPageTrashed: true } },
         },
         },
-      };
-    });
+      },
+      {
+        updateMany: {
+          filter: { relatedPage: { $nin: deletedPageList } },
+          update: { $set: { isPageTrashed: false } },
+        },
+      },
+    ];
 
 
-    if (requests.length > 0) {
-      await db.collection('pagetagrelations').bulkWrite(requests);
+    try {
+      await db.collection('pagetagrelations').bulkWrite(addFieldRequests);
+      logger.info('Migration has successfully applied');
+    }
+    catch (err) {
+      logger.error(err);
+      logger.info('Migration has failed');
     }
     }
 
 
-    logger.info('Migration has successfully applied');
   },
   },
 
 
   async down(db) {
   async down(db) {
     logger.info('Rollback migration');
     logger.info('Rollback migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
 
-    const pages = await Page.find({});
-
-    // create requests for bulkWrite
-    const requests = pages.map((page) => {
-      return {
-        updateMany: {
-          filter: { relatedPage: page._id },
-          update: { $unset: { isPageTrashed: '' } },
-        },
-      };
-    });
-
-    if (requests.length > 0) {
-      await db.collection('pagetagrelations').bulkWrite(requests);
+    try {
+      await db.collection('pagetagrelations').updateMany(
+        {},
+        { $unset: { isPageTrashed: '' } },
+      );
+      logger.info('Migration has been successfully rollbacked');
+    }
+    catch (err) {
+      logger.error(err);
+      logger.info('Migration has failed');
     }
     }
-
-    logger.info('Migration has been successfully rollbacked');
 
 
   },
   },
 };
 };