web-dev-qa-db-ja.com

Spring Data MongoDBのクエリに特定のフィールドのみを返す方法は?

Spring Data Mongoで特定のフィールドを選択するにはどうすればよいですか。次のことを試しましたが、FooからStringに例外をキャストしました。

@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;
  …
}
17
richersoon

MongoDBは、標準クエリに対してJSONドキュメントのみを返します。あなたが見たいものは、まだ_List<Foo>_を返すことで達成できます。 _@Query_のfieldsプロパティにより、1に設定されたフィールドのみが返されます。

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

通常、部分的に満たされたFooインスタンスがsave(…)に順番に渡されるのを防ぐために、そのために決定的なDTOを導入することをお勧めします。

別のオプションは、集約フレームワークを使用することですが、それはより複雑です。

21
Oliver Drotbohm

使用できます

public interface PersonRepository extends MongoRepository<Person, String>

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

}

春データの詳細情報 ドキュメント

14
Nikhil Kumar K

使用できます

Query query = new Query();

query.fields().include("path");
14
Pankaj Mandale

以下のクエリを使用して、特定のフィールドを取得できます。

@Query(fields="{path : 1}")
Foo findPathByPath(String path);

DBに存在するレコード

{
    "name" : "name2",
    "path" : "path2"
},
{
    "name" : "name3",
    "path" : "path3"
}

以下のクエリは、path = Path3の場合Fooオブジェクトを返します

{
    "name": null,
    "path": "path3"
}

fieldName:1で必須フィールドを指定する必要があり、必要ない場合は0で指定します。

2
Ajit Nikam