将mongodb查询结果转换为java中的数据模型类

时间:2014-09-10 08:55:56

标签: java mongodb model

我想创建一个java类的数据模型,这样我就可以通过使用类中定义的方法自动获取从mongodb的dbcollection中检索到的数据Model的一些属性。

让我们如果我有一个存储在名为“STUDENT”的mongodb集合中的数据结构,如:

{
   "name":"Jone",
   "id":"20140314201"
   "courses":[
        {
           "CourseName":"math",
           "teacher":"Prof Smith",
           "Score":80
        },
        {
           "CourseName":"literature",
           "teacher":"Brown"
           "Score":58
        }
   ]
}

定义这样的学生班总是很方便:

class Student extends BasicDBObject{
     private List<Course> courseList = new ArrayList();
     private final String name;
     private final String id;

     public Student(String _name,String _id){
         name = _name;
         id = _id;
     }
     public List<Course> getFailedCourseList(){
        List<Course> failedCouseList = blablabla...
        return failedCouseList
     }
     public addCourse(Course _course){
          couseList.add(_cousrse);
     }
     .....
}

问题是我可以做些工作来实现这些目标:

1.将学生项目保存到mongodb时,我可以这样做:

Student studentItem = new Student("Jone","20140314201")
studentItem.addCourse(course1) 
studentItem.addCourse(course2)
....
DBC.save(studentItem)


2.从db集合中检索数据时,我可以将BasicDBObject(这是返回的默认对象类型dbcollection findOne)转换为我定义的Class Student

Student studentJone = (Student)DBC.findOne(new BasicDBObject("name":"Jone"));

这样我就可以通过调用Student类的方法来找出哪些课程失败了:

List<Course> failedCourseList = studentJone.getFailedCourseList();

2 个答案:

答案 0 :(得分:1)

试试这个:

BasicDBObject query= new BasicDBObject();
query.put("any key","any value"); //THis add criteria
DBObject dbObjectResult = getMongoTemplate().getCollection(COLLECTION)
                    .findOne(query);
Foo foo = getMongoTemplate().getConverter().read(Foo.class, dbObjectResult);

应该工作

答案 1 :(得分:0)