目標がフィールドのサブセットのみを標準ドメインオブジェクトに入力することである場合は、別の回答d.fields().include()
で説明されているように使用するのが方法です。ただし、オブジェクト全体を使用することは望ましくないことがよくあり(部分的に入力されていると、将来の開発者がコードを読むのを簡単に誤解する可能性があります)、取得するフィールドのサブセットのみを含むオブジェクトが必要です。この場合、フィールドのサブセットのみを使用して投影オブジェクトを作成および取得すると、適切に機能します。
投影クラス
@Document("person") // Must be the same collection name used by Person
public class PersonNameOnly {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
MongoTemplate
クエリ
mongoTemplate.find(new Query(...), PersonNameOnly.class);
複数のタイプに同じプロジェクションオブジェクトを使用する場合は、プロジェクションオブジェクトからコレクション名を含む宣言を省略し、クエリ@Document
でコレクション名を指定できます。MongoTemplate
投影クラス
public class NameOnly {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
MongoTemplate
クエリ
mongoTemplate.find(new Query(...), NameOnly.class, "person");