2015-08-20 58 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

相關問題