在Morphia中查询未知映射的对象

时间:2013-06-27 06:41:30

标签: java mongodb morphia

我构建了一个用于从MongoDB导出文档的用户界面。

用户只需输入数据库名称和密码,然后应提示他们要导出哪些字段。所以我首先需要能够列出这些字段。这是基于Java的,我使用Morphia。

我的问题是,如何检索存储在集合中的对象类型,以便我可以向用户列出其属性?我想Morphia的“mapper”类在这里很有用,肯定会有一些反思......但我对这些并不太了解。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

“你如何获得集合名称”是一个很好的问题。如果您直接从mongo获取列表,那么您最终可能会得到没有在morphia中映射的支持类的集合。您可以从Mapper((DatastoreImpl)ds).getMapper()获取映射的类,并使用该类列表来提示用户要导出的类/字段。

除此之外,你总是可以使用DBCollection.findOne()从集合中获取文档,在文档中查找classname字段并使用它来获取类,从而获得可用的字段。这并不排除mongo中包含morphia中未映射数据的文档的可能性。如果您迁移架构或操作morphia之外的文档,则会发生这种情况。请记住一些事情。

答案 1 :(得分:-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));
    }