2012-08-14 44 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

相關問題