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;
…
}
MongoDBは、標準クエリに対してJSONドキュメントのみを返します。あなたが見たいものは、まだ_List<Foo>
_を返すことで達成できます。 _@Query
_のfields
プロパティにより、1に設定されたフィールドのみが返されます。
_@Query(value="{ path : ?0}", fields="{ path : 0 }")
List<Foo> findByPath(String path);
_
通常、部分的に満たされたFoo
インスタンスがsave(…)
に順番に渡されるのを防ぐために、そのために決定的なDTOを導入することをお勧めします。
別のオプションは、集約フレームワークを使用することですが、それはより複雑です。
使用できます
public interface PersonRepository extends MongoRepository<Person, String>
@Query(value="{ 'firstname' : ?0 }",fields="{ 'firstname' : 1, 'lastname' : 1}")
List<Person> findByThePersonsFirstname(String firstname);
}
春データの詳細情報 ドキュメント
使用できます
Query query = new Query();
query.fields().include("path");
以下のクエリを使用して、特定のフィールドを取得できます。
@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で指定します。