[英]How do I create a view using spring-data-mongodb without resorting to mongoTemplate.executeCommand(..)?
[英]How do I retrieve a subset of fields using Spring's MongoTemplate and Query classes?
我希望能夠執行以下控制台命令以返回僅填充了一部分字段但使用 Spring 的MongoTemplate
類的所有行:
控制台命令
db.person.find(null,{name:1})
蒙戈模板
mongoTemplate.find(new Query(...), Person.class)
有關投影(子集)查詢的信息可以在 MongoDB 手冊中找到。
Query q = new Query();
q.fields().include("name");
mongoTemplate.find(q, Person.class);
mongoTemplate.getCollection(COLLECTION).find(null, new BasicDBObject(FIELD, "1"))
您可以使用:
mongoTemplate.findDistinct(String field, Class<?> entityClass, Class<T> resultClass);
如果目標是僅使用字段子集填充標准域對象,則使用d.fields().include()
如另一個答案中所述是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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.