Как получить подмножество полей, используя классы Springs MongoTemplate и Criteria

Я хочу иметь возможность выполнить следующую консольную команду, чтобы вернуть все строки только с заполненным подмножеством полей, но с использованием Spring MongoTemplate учебный класс:

Консольная команда

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

MongoTemplate

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

Информацию о подмножестве запросов можно найти здесь, если вы заинтересованы http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields

Есть идеи?

ура

4 ответа

Решение
Query q = new Query();
q.fields().include("name");
mongoTemplate.find(q, Person.class);
mongoTemplate.getCollection(COLLECTION).find(null, new BasicDBObject(FIELD, "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.find(new Query(...), PersonNameOnly.class);

Если вы хотите использовать один и тот же объект проекции для нескольких типов, вы можете опустить @Document объявление с именем коллекции из объекта проекции и укажите имя коллекции в запросе.

Класс проекции

      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");

Ты можешь использовать:

      mongoTemplate.findDistinct(String field, Class<?> entityClass, Class<T> resultClass);
Другие вопросы по тегам