How to return only specific fields for a query in Spring Data MongoDB?

richersoon picture richersoon · Aug 20, 2015 · Viewed 42.5k times · Source

How can we select specific fields in Spring Data Mongo. I tried the following but I got cast exception from Foo to String.

Using @Query

@Query(value="{path : ?0}", fields="{path : 0}")
String findPathByPath(String path);

Non @Query

String findPathByPath(String path);

Here is the document model

@Document(collection = "foo")
public class Foo  {

  String name, path;
  …
}

Answer

Oliver Drotbohm picture Oliver Drotbohm · Sep 2, 2015

MongoDB only returns JSON documents for standard queries. What you'd like to see can be achieved by still returning a List<Foo>. The fields property in @Query will cause only the fields set to 1 being returned.

@Query(value="{ path : ?0}", fields="{ path : 0 }")
List<Foo> findByPath(String path);

We usually recommend introducing a dedicted DTO for that so that you prevent the partially filled Foo instance from being handed to save(…) in turn.

Another option is using the aggreation framework but that's more involved.