javamongodbmongodb-javadbobject

Converting DBObject to Java Object while retrieve values from MongoDB


From my Java application, I have stored the values in mongoDB in ArrayList(set of Java objects). How can I retrieve the data from DBObject

I am storing the data in mongoDB like this:

{  "students" : [{"firstName" : "Jesse", "lastName" : "Varnell", "age" : "15", "gender" : "M" }, { "firstName" : "John", "lastName" : "Doe", "age" : "13", "gender" : "F"}] }

I am having the Java Object for the Student like:

public class Student {
    public String firstName;
    public String lastName;
    public String age;
    public String gender;  // M, F      
}

I am retrieving the data from mongoDB like:

BasicDBObject query = new BasicDBObject();
query.put("user", username); 
DBCursor cursor = theCollection.find(query); 
while (cursor.hasNext()) {
    DBObject theObj = cursor.next();
    //How to get the DBObject value to ArrayList of Java Object?
}

Solution

  • You can do it as follows :

    List<Student> students = new ArrayList<Student>();
    
    BasicDBObject query = new BasicDBObject();
    query.put("user", username); 
    DBCursor cursor = theCollection.find(query); 
    while (cursor.hasNext()) {
        DBObject theObj = cursor.next();
        //How to get the DBObject value to ArrayList of Java Object?
    
        BasicDBList studentsList = (BasicDBList) theObj.get("students");
        for (int i = 0; i < studentsList.size(); i++) {
            BasicDBObject studentObj = (BasicDBObject) studentsList.get(i);
            String firstName = studentObj.getString("firstName");
            String lastName = studentObj.getString("lastName");
            String age = studentObj.getString("age");
            String gender = studentObj.getString("gender");
    
            Student student = new Student();
            student.setFirstName(firstName);
            student.setLastName(lastName);
            student.setAge(age);
            student.setGender(gender);
    
            students.add(student);
        }               
    }