我构建了一个用于从MongoDB导出文档的用户界面。
用户只需输入数据库名称和密码,然后应提示他们要导出哪些字段。所以我首先需要能够列出这些字段。这是基于Java的,我使用Morphia。
我的问题是,如何检索存储在集合中的对象类型,以便我可以向用户列出其属性?我想Morphia的“mapper”类在这里很有用,肯定会有一些反思......但我对这些并不太了解。任何帮助表示赞赏!
答案 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));
}