22

MongoTemplate次のコンソールコマンドを実行して、フィールドのサブセットのみが入力されているが、Springのクラスを使用しているすべての行を返すことができるようにしたいと思います。

コンソールコマンド

db.person.find(null,{name:1})

MongoTemplate

mongoTemplate.find(new Query(...), Person.class)

射影(サブセット)クエリに関する情報は、MongoDBのマニュアルに記載されています。

4

4 に答える 4

58
Query q = new Query();
q.fields().include("name");
mongoTemplate.find(q, Person.class);
于 2012-05-03T10:04:37.517 に答える
2
mongoTemplate.getCollection(COLLECTION).find(null, new BasicDBObject(FIELD, "1"))
于 2012-05-30T13:04:27.083 に答える
1

次を使用できます。

mongoTemplate.findDistinct(String field, Class<?> entityClass, Class<T> resultClass);
于 2021-04-15T14:48:19.077 に答える
1

目標がフィールドのサブセットのみを標準ドメインオブジェクトに入力することである場合は、別の回答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");
于 2021-06-01T15:51:17.573 に答える