Morphia返回字符串列表,它是所有文档的字段

时间:2012-08-14 12:27:57

标签: java mongodb morphia

如果我有一个充满以下元素的集合

@Entity
public void MyEntity{
  public String name;
  public String type;
  ...
}

我想要返回List<String>(或Set)不是元素,而只返回其name字段。

List<String> allNames = datasotre.find(MyEntity.class).asList("name");

这是示例查询,没有Morphia数据存储区的这种方法。

3 个答案:

答案 0 :(得分:3)

要限制返回的字段,请在Query上调用“retrieveFields”方法。例如,要仅获取所有MyEntity对象的名称字段:

datastore.find(MyEntity.class).retrievedFields( true, "name").asList()

编辑 - 您可以使用以下查询获取列表字符串,只要您不介意该列表仅包含唯一值(即没有重复的名称):

DBCollection m = datastore.getCollection( MyEntity.class );
List names = m.distinct( "name", new BasicDBObject() );

“名称”列表仅包含字符串。

答案 1 :(得分:1)

这里的问题是“密钥”没有实际查询。查询都返回“键/值对”。

理论上,datastore.find()中的字段应映射到MyEntity中的字段,以便可以使用反射。但是,如果您有其他人从不同的地方写入数据库,他们可能会有额外的表格。

如果是这种情况,您需要运行Map / Reduce来获取所有“关键”名称的列表。

a sample here

答案 2 :(得分:0)

您正在寻找datastore.find(MyEntity.class).retrievedFields(true, "name").asList();。这将包含_id和name属性。

请参阅http://code.google.com/p/morphia/wiki/Query#Ignoring_Fields