2015-08-20 54 views
8

我们如何在Spring Data Mongo中选择特定的字段。我尝试了以下,但我得到了从FooString的投射异常。如何在Spring Data MongoDB中仅返回查询的特定字段?

使用@Query

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

@Query

String findPathByPath(String path); 

这里是文档模型

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

    String name, path; 
    … 
} 
+0

public interface PersonRepository extends MongoRepository<Person, String> @Query(value="{ 'firstname' : ?0 }",fields="{ 'firstname' : 1, 'lastname' : 1}") List<Person> findByThePersonsFirstname(String firstname); } 

更多信息,你在说什么? MongoDB没有列。 – chrylis

+0

我只想从我的模型中返回特定的字段。 在sql中它相当于 SELECT路径FROM foo – richersoon

回答

4

您可以使用

查询查询= NE w Query(); (“path”);}();

11

MongoDB只为标准查询返回JSON文档。你想看到的东西可以通过返回List<Foo>来实现。 @Query中的fields属性只会导致返回字段设置为1。

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

我们通常建议引入dedicted DTO为使您防止部分填充Foo实例依次从被交给save(…)

另一种选择是使用聚合框架,但更多的涉及。

+1

Oliver,为每个选择查询创建一个DTO是不可行的,因为我们运行大量查询来选择子数据集。在我们不想映射到DTO的情况下,Spring Data JPA返回List 。相似地,有没有API返回值的MAp,而不是映射到DTO? – VimalKumar

相关问题