2
0
Эх сурвалжийг харах

improve performance issue

yuto-o 4 жил өмнө
parent
commit
46b412d142

+ 29 - 15
packages/app/src/migrations/20210921173042-add-is-trashed-field.js

@@ -11,23 +11,37 @@ 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 deletedPages = await Page.find({ status: Page.STATUS_DELETED });
-    const deletedPageList = deletedPages.map(deletedPage => deletedPage._id);
-
-    const addFieldRequests = [
-      {
-        updateMany: {
-          filter: { relatedPage: { $in: deletedPageList } },
-          update: { $set: { isPageTrashed: true } },
+    const deletedPageStatusQuery = { status: Page.STATUS_DELETED };
+
+    const PAGE_COUNT = await Page.count(deletedPageStatusQuery);
+    const OFFSET = 1000;
+    let skip = 0;
+
+    const deletedPagesPromises = [];
+    const addFieldRequests = [];
+
+    while (PAGE_COUNT > skip) {
+      deletedPagesPromises.push(Page.find(deletedPageStatusQuery).select('_id').skip(skip).limit(OFFSET));
+      skip += OFFSET;
+    }
+
+    for await (const deletedPages of deletedPagesPromises) {
+      const deletedPageIdList = deletedPages.map(deletedPage => deletedPage._id);
+      addFieldRequests.push(
+        {
+          updateMany: {
+            filter: { relatedPage: { $in: deletedPageIdList } },
+            update: { $set: { isPageTrashed: true } },
+          },
         },
         },
-      },
-      {
-        updateMany: {
-          filter: { relatedPage: { $nin: deletedPageList } },
-          update: { $set: { isPageTrashed: false } },
+        {
+          updateMany: {
+            filter: { relatedPage: { $nin: deletedPageIdList } },
+            update: { $set: { isPageTrashed: false } },
+          },
         },
         },
-      },
-    ];
+      );
+    }
 
 
     try {
     try {
       await db.collection('pagetagrelations').bulkWrite(addFieldRequests);
       await db.collection('pagetagrelations').bulkWrite(addFieldRequests);