diff --git a/app/server/appsmith-plugins/mongoPlugin/src/main/java/com/external/plugins/commands/Find.java b/app/server/appsmith-plugins/mongoPlugin/src/main/java/com/external/plugins/commands/Find.java index 5c82aec0ad..f0efcebd9b 100644 --- a/app/server/appsmith-plugins/mongoPlugin/src/main/java/com/external/plugins/commands/Find.java +++ b/app/server/appsmith-plugins/mongoPlugin/src/main/java/com/external/plugins/commands/Find.java @@ -89,7 +89,7 @@ public class Find extends MongoCommand { } if (!StringUtils.isNullOrEmpty(this.projection)) { - document.put("projection", this.projection); + document.put("projection", parseSafely("Projection", this.projection)); } // Default to returning 10 documents if not mentioned diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginTest.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginTest.java index 9e19e4cfd5..834c611496 100644 --- a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginTest.java +++ b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginTest.java @@ -57,6 +57,7 @@ import static com.external.plugins.constants.ConfigurationIndex.DELETE_LIMIT; import static com.external.plugins.constants.ConfigurationIndex.DELETE_QUERY; import static com.external.plugins.constants.ConfigurationIndex.DISTINCT_KEY; import static com.external.plugins.constants.ConfigurationIndex.DISTINCT_QUERY; +import static com.external.plugins.constants.ConfigurationIndex.FIND_PROJECTION; import static com.external.plugins.constants.ConfigurationIndex.FIND_QUERY; import static com.external.plugins.constants.ConfigurationIndex.FIND_SORT; import static com.external.plugins.constants.ConfigurationIndex.INPUT_TYPE; @@ -1304,4 +1305,36 @@ public class MongoPluginTest { .verifyComplete(); } + @Test + public void testFindCommandProjection() { + ActionConfiguration actionConfiguration = new ActionConfiguration(); + + Map configMap = new HashMap<>(); + configMap.put(BSON, Boolean.FALSE); + configMap.put(INPUT_TYPE, "FORM"); + configMap.put(COMMAND, "FIND"); + configMap.put(FIND_QUERY, "{ age: { \"$gte\": 30 } }"); + configMap.put(FIND_SORT, "{ id: 1 }"); + configMap.put(FIND_PROJECTION, "{ name: 1 }"); + configMap.put(COLLECTION, "users"); + + actionConfiguration.setPluginSpecifiedTemplates(generateMongoFormConfigTemplates(configMap)); + + DatasourceConfiguration dsConfig = createDatasourceConfiguration(); + Mono dsConnectionMono = pluginExecutor.datasourceCreate(dsConfig); + Mono executeMono = dsConnectionMono.flatMap(conn -> pluginExecutor.executeParameterized(conn, new ExecuteActionDTO(), dsConfig, actionConfiguration)); + StepVerifier.create(executeMono) + .assertNext(obj -> { + System.out.println(obj); + ActionExecutionResult result = (ActionExecutionResult) obj; + assertNotNull(result); + assertTrue(result.getIsExecutionSuccess()); + assertNotNull(result.getBody()); + assertEquals(2, ((ArrayNode) result.getBody()).size()); + JsonNode value = ((ArrayNode) result.getBody()).get(0).get("name"); + assertNotNull(value); + }) + .verifyComplete(); + } + }