2012-08-14 76 views
2

如果我有一个集合全下列元素吗啡来返回一个字符串这是所有文件

@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

为了限制领域的调用返回上查询了“retrievedFields”的方法。例如,只获取名称领域的所有myEntity所对象:

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

编辑 - 您可以通过下面的查询,只要得到一个字符串列表,你不介意的名单将只包含唯一值(即没有重复的名称):

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

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

+0

我希望返回列表,而不是列表。 – fiction 2012-08-14 13:40:18

+0

morphia没有这样的功能,我也不明白为什么它会被添加。如果您想要名称字段中的所有值的明确列表,则可以按照上面的建议直接使用该驱动程序。 – 2012-08-14 17:58:23

1

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

从理论上讲,在datastore.find()领域应该映射到MyEntity所以你可以使用反射的领域。但是,如果您有其他人从不同的地方写入数据库,他们可能会播种额外的表格。

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

还有a sample here

相关问题