diff --git a/spec/ParseQuery.Aggregate.spec.js b/spec/ParseQuery.Aggregate.spec.js
index 902b34d9d3..d255f30166 100644
--- a/spec/ParseQuery.Aggregate.spec.js
+++ b/spec/ParseQuery.Aggregate.spec.js
@@ -1500,4 +1500,24 @@ describe('Parse.Query Aggregate testing', () => {
     expect(results.length).toEqual(3);
     await database.adapter.deleteAllClasses(false);
   });
+
+  it_only_db('mongo')('aggregate handle mongodb errors', async () => {
+    const pipeline = [
+      {
+        $search: {
+          index: "default",
+          text: {
+            path: ["name"],
+            query: 'foo',
+          },
+        },
+      },
+    ];
+    try {
+      await new Parse.Query(TestObject).aggregate(pipeline);
+      fail();
+    } catch (e) {
+      expect(e.code).toBe(Parse.Error.INVALID_QUERY);
+    }
+  });
 });
diff --git a/spec/support/CurrentSpecReporter.js b/spec/support/CurrentSpecReporter.js
index 626517cdf4..27e4942095 100755
--- a/spec/support/CurrentSpecReporter.js
+++ b/spec/support/CurrentSpecReporter.js
@@ -22,6 +22,8 @@ const flakyTests = [
   "Email Verification Token Expiration:  sets the _email_verify_token_expires_at and _email_verify_token fields after user SignUp",
   // Expected 0 to be 1.
   "Email Verification Token Expiration:  should send a new verification email when a resend is requested and the user is UNVERIFIED",
+  // Expected 0 to be 1.
+  "Email Verification Token Expiration:  should match codes with emailVerifyTokenReuseIfValid",
 ];
 
 /** The minimum execution time in seconds for a test to be considered slow. */
diff --git a/src/Routers/AggregateRouter.js b/src/Routers/AggregateRouter.js
index d2b8636b74..cf9b5cd190 100644
--- a/src/Routers/AggregateRouter.js
+++ b/src/Routers/AggregateRouter.js
@@ -5,7 +5,7 @@ import ClassesRouter from './ClassesRouter';
 import UsersRouter from './UsersRouter';
 
 export class AggregateRouter extends ClassesRouter {
-  handleFind(req) {
+  async handleFind(req) {
     const body = Object.assign(req.body || {}, ClassesRouter.JSONFromQuery(req.query));
     const options = {};
     if (body.distinct) {
@@ -31,8 +31,8 @@ export class AggregateRouter extends ClassesRouter {
     if (typeof body.where === 'string') {
       body.where = JSON.parse(body.where);
     }
-    return rest
-      .find(
+    try {
+      const response = await rest.find(
         req.config,
         req.auth,
         this.className(req),
@@ -40,15 +40,16 @@ export class AggregateRouter extends ClassesRouter {
         options,
         req.info.clientSDK,
         req.info.context
-      )
-      .then(response => {
-        for (const result of response.results) {
-          if (typeof result === 'object') {
-            UsersRouter.removeHiddenProperties(result);
-          }
+      );
+      for (const result of response.results) {
+        if (typeof result === 'object') {
+          UsersRouter.removeHiddenProperties(result);
         }
-        return { response };
-      });
+      }
+      return { response };
+    } catch (e) {
+      throw new Parse.Error(Parse.Error.INVALID_QUERY, e.message);
+    }
   }
 
   /* Builds a pipeline from the body. Originally the body could be passed as a single object,