簡體   English   中英

如何使用 Spring 的 MongoTemplate 和 Query 類檢索字段子集?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM