如果我有一个充满以下元素的集合
@Entity
public void MyEntity{
public String name;
public String type;
...
}
我想要返回List<String>
(或Set
)不是元素,而只返回其name
字段。
List<String> allNames = datasotre.find(MyEntity.class).asList("name");
这是示例查询,没有Morphia数据存储区的这种方法。
答案 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来获取所有“关键”名称的列表。
答案 2 :(得分:0)
您正在寻找datastore.find(MyEntity.class).retrievedFields(true, "name").asList();
。这将包含_id和name属性。
请参阅http://code.google.com/p/morphia/wiki/Query#Ignoring_Fields