2013-06-27 30 views
0

我構建了一個用戶界面來從MongoDB中導出文檔。在Morphia中查詢映射未知的對象

用戶只需輸入數據庫的名稱和密碼,然後應該提示他們想要導出哪些字段。所以我需要首先能夠列出這些字段。這是基於Java的,我使用Morphia。

我的問題是,我如何檢索存儲在集合中的對象的類型,以便我可以列出用戶的屬性?我認爲Morphia的「mapper」類在這裏很有用,而且肯定會涉及到一些反射......但我對這些知之甚少。任何幫助感謝!

+0

您如何知道要查詢哪個集合?或者這也是用戶必須定義​​的東西? – Trisha

回答

-2
MongoTemplate mongoTemplate = new MongoTemplate(mongo, "test_db"); 
    DBCollection dbc = mongoTemplate.getCollection("collection"); 
    DBObject query = new QueryBuilder().put("user_id").is(id).get(); 
    DBObject dbo = dbc.findOne(query); 
    if (dbo == null) { 
     log.warn("user_id is not exist."); 
     return ; 
    } 
    Set<String> keys = dbo.keySet(); 
    for (String key : keys) { 
     log.info(key + " : " + dbo.get(key)); 
    } 
+1

添加一些解釋! – Nargis

+0

我不明白這個代碼... – seinecle

+0

MongoTemplate是一個SpringData類,而不是一個Morphia類,所以這並不回答這個問題,這是如何使用Morphia做到這一點。 – Trisha

1

「你如何獲得集合名稱」是一個很好的問題。如果你直接從mongo獲得列表,那麼最終可能會得到在morphia中沒有映射後備類的集合。您可以從映射器((DatastoreImpl)ds).getMapper()獲取映射類並使用該類列表來提示用戶輸出哪些類/字段。除了這個,你總是可以使用DBCollection.findOne()從集合中獲取文檔,在文檔中查找classname字段並使用它來獲得類,從而獲得可用的字段。這並不排除mongo中包含morphia中未映射數據的文檔的可能性。如果您遷移模式或在morphia外部操作文檔,就會發生這種情況。只是要記住。