diff --git a/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/plan/RexToMongoTranslator.java b/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/plan/RexToMongoTranslator.java
index a1e9f64..16a51d4 100644
--- a/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/plan/RexToMongoTranslator.java
+++ b/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/plan/RexToMongoTranslator.java
@@ -139,11 +139,12 @@
     if (call.getKind() == SqlKind.CAST) {
       return strings.get(0);
     }
-    String stdOperator = MONGO_OPERATORS.get(call.getOperator());
+    SqlOperator sqlOperator = call.getOperator();
+    String stdOperator = MONGO_OPERATORS.get(sqlOperator);
     if (stdOperator != null) {
       return new BsonDocument(stdOperator, new BsonArray(strings));
     }
-    if (call.getOperator() == SqlStdOperatorTable.ITEM) {
+    if (sqlOperator == SqlStdOperatorTable.ITEM) {
       RexNode op1 = call.operands.get(1);
       if (op1 instanceof RexLiteral) {
         if (op1.getType().getSqlTypeName() == SqlTypeName.INTEGER) {
@@ -154,7 +155,7 @@
         }
       }
     }
-    if (call.getOperator() == SqlStdOperatorTable.CASE) {
+    if (sqlOperator == SqlStdOperatorTable.CASE) {
       // case(a, b, c)  -> $cond:[a, b, c]
       // case(a, b, c, d) -> $cond:[a, b, $cond:[c, d, null]]
       // case(a, b, c, d, e) -> $cond:[a, b, $cond:[c, d, e]]
@@ -180,6 +181,24 @@
       }
       return result;
     }
+    if (sqlOperator == SqlStdOperatorTable.IS_NULL) {
+      BsonDocument result = new BsonDocument();
+      BsonArray args = new BsonArray();
+      args.add(strings.get(0));
+      args.add(BsonNull.VALUE);
+      // Perf: the $eq operator can make use of indexes in Mongo
+      result.put(MongoOp.EQUAL.getCompareOp(), args);
+      return result;
+    }
+    if (sqlOperator == SqlStdOperatorTable.IS_NOT_NULL) {
+      BsonDocument result = new BsonDocument();
+      BsonArray args = new BsonArray();
+      args.add(strings.get(0));
+      args.add(BsonNull.VALUE);
+      // Perf: the $ne operator can make use of indexes in Mongo
+      result.put(MongoOp.NOT_EQUAL.getCompareOp(), args);
+      return result;
+    }
     throw new IllegalArgumentException("Translation of " + call + " is not supported by MongoProject");
   }
 
diff --git a/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/MongoTestConstants.java b/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/MongoTestConstants.java
index 1e9d243..4dbb605 100644
--- a/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/MongoTestConstants.java
+++ b/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/MongoTestConstants.java
@@ -67,8 +67,9 @@
 
   // test query template1
   String TEST_QUERY_PROJECT_PUSH_DOWN_TEMPLATE_1 = "SELECT `employee_id` FROM mongo.%s.`%s`";
-  String TEST_QUERY_PROJECT_PUSH_DOWN__TEMPLATE_2 = "select `employee_id`, `rating` from mongo.%s.`%s`";
-  String TEST_QUERY_PROJECT_PUSH_DOWN__TEMPLATE_3 = "select * from mongo.%s.`%s`";
+  String TEST_QUERY_PROJECT_PUSH_DOWN_TEMPLATE_2 = "select `employee_id`, `rating`, coalesce(`full_name`, 'Bob') from mongo.%s.`%s`";
+  String TEST_QUERY_PROJECT_PUSH_DOWN_TEMPLATE_3 = "select * from mongo.%s.`%s`";
+  String TEST_QUERY_PROJECT_PUSH_DOWN_TEMPLATE_4 = "select coalesce(`position_id`, -1) position_id_or_default from mongo.%s.`%s`";
   String TEST_FILTER_PUSH_DOWN_IS_NULL_QUERY_TEMPLATE_1 = "SELECT `employee_id` FROM mongo.%s.`%s` where position_id is null";
   String TEST_FILTER_PUSH_DOWN_IS_NOT_NULL_QUERY_TEMPLATE_1 = "SELECT `employee_id` FROM mongo.%s.`%s` where position_id is not null";
   String TEST_FILTER_PUSH_DOWN_EQUAL_QUERY_TEMPLATE_1 = "SELECT `full_name` FROM mongo.%s.`%s` where rating = 52.17";
diff --git a/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/TestMongoFilterPushDown.java b/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/TestMongoFilterPushDown.java
index b0644c1..7a28ebd 100644
--- a/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/TestMongoFilterPushDown.java
+++ b/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/TestMongoFilterPushDown.java
@@ -60,4 +60,25 @@
         .go();
   }
 
+  @Test
+  public void testFilterPushDownIsNull() throws Exception {
+    String queryString = String.format(TEST_FILTER_PUSH_DOWN_IS_NULL_QUERY_TEMPLATE_1, EMPLOYEE_DB, EMPINFO_COLLECTION);
+
+    testBuilder()
+        .sqlQuery(queryString)
+        .unOrdered()
+        .expectsNumRecords(2)
+        .go();
+  }
+
+  @Test
+  public void testFilterPushDownIsNotNull() throws Exception {
+    String queryString = String.format(TEST_FILTER_PUSH_DOWN_IS_NOT_NULL_QUERY_TEMPLATE_1, EMPLOYEE_DB, EMPINFO_COLLECTION);
+
+    testBuilder()
+        .sqlQuery(queryString)
+        .unOrdered()
+        .expectsNumRecords(17)
+        .go();
+  }
 }
diff --git a/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/TestMongoProjectPushDown.java b/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/TestMongoProjectPushDown.java
index 372ec6d..e615c0f 100644
--- a/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/TestMongoProjectPushDown.java
+++ b/contrib/storage-mongo/src/test/java/org/apache/drill/exec/store/mongo/TestMongoProjectPushDown.java
@@ -81,7 +81,7 @@
 
   @Test
   public void testMultipleColumnsProject() throws Exception {
-    String query = String.format(TEST_QUERY_PROJECT_PUSH_DOWN__TEMPLATE_2, EMPLOYEE_DB, EMPINFO_COLLECTION);
+    String query = String.format(TEST_QUERY_PROJECT_PUSH_DOWN_TEMPLATE_2, EMPLOYEE_DB, EMPINFO_COLLECTION);
 
     testBuilder()
         .sqlQuery(query)
@@ -93,7 +93,7 @@
 
   @Test
   public void testStarProject() throws Exception {
-    String query = String.format(TEST_QUERY_PROJECT_PUSH_DOWN__TEMPLATE_3, EMPLOYEE_DB, EMPINFO_COLLECTION);
+    String query = String.format(TEST_QUERY_PROJECT_PUSH_DOWN_TEMPLATE_3, EMPLOYEE_DB, EMPINFO_COLLECTION);
     testBuilder()
         .sqlQuery(query)
         .unOrdered()
@@ -101,6 +101,19 @@
         .go();
   }
 
+  // DRILL-8238
+  @Test
+  public void testOperatorsProject() throws Exception {
+    String query = String.format(TEST_QUERY_PROJECT_PUSH_DOWN_TEMPLATE_4, EMPLOYEE_DB, EMPINFO_COLLECTION);
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .baselineColumns("position_id_or_default")
+        .expectsNumRecords(19)
+        .go();
+  }
+
   @Test // DRILL-8190
   public void testProjectWithJoin() throws Exception {
     String query = "SELECT sum(s1.sales) s1_sales,\n" +
@@ -122,5 +135,4 @@
       .baselineValues(1194L, 1194L)
       .go();
   }
-
 }
