2011-07-24 48 views
5

Tôi có đoạn code dưới đây mà hoạt động:Cơ sở dữ liệu Mongo lưu dữ liệu từ Map

if (aDBCursor.hasNext()) { 
    DBObject aDbObject = aDBCursor.next(); 
    aDbObject.put("title", "Test Title"); 
    ArrayList<DBObject> department = new ArrayList<DBObject>(); 

    DBObject nested1 = new BasicDBObject(); 
    nested1.put("name", "Department A"); 
    nested1.put("id", 1); 
    department.add(nested1); 

    DBObject nested2 = new BasicDBObject(); 
    nested2.put("name", "Department B"); 
    nested2.put("id", 2); 
    department.add(nested2); 

    aDbObject.put("department", department); 
    collection.save(aDbObject); 
} 

Tuy nhiên tôi có dữ liệu cho Bộ A và B trong một bản đồ như:

Map<Object,Object> map = new HashMap<Object,Object>(); 
map.put("1", "Department A"); 
map.put("2", "Department B"); 

gì sẽ là tốt nhất/cách dễ nhất để lưu dữ liệu này là gì? Có cách nào để đưa bản đồ thẳng vào DB mongo không? Hay tôi phải lặp lại bản đồ?

Các dữ liệu mà đi vào bản đồ đã được lấy từ cơ sở dữ liệu như vậy:

String[] values = req.getParameterValues("departments"); 
Map<Object,Object> map = new HashMap<Object,Object>(); 

DBCollection collection = database.getCollection("Departments"); 
BasicDBObject query = new BasicDBObject(); 
query.put("id", new BasicDBObject("$in", values)); 
DBCursor cursor = collection.find(query); 

có thể còn tốt hơn là tôi chỉ có thể đặt DBCursor lại được đồ vật vào cơ sở dữ liệu.

Bất kỳ ý tưởng nào?

Cảm ơn bạn đã được trợ giúp hoặc gợi ý!

Trả lời

5

Native Java loại (int, float, String, Date, Map, vv) sẽ được tự động mã hóa để loại BSON đúng, vì vậy bạn có thể sử dụng một BasicDBObject để đưa Map thẳng vào bộ sưu tập Mongo:

// you probably want to be more specific with your generics than Object! 
Map<Object,Object> map = new HashMap<Object,Object>(); 
map.put("1", "Department A"); 
map.put("2", "Department B"); 
collection.insert(new BasicDBObject(map)); 

Tuy nhiên, có vẻ như Map của bạn không thực sự có cấu trúc mà bạn muốn, vì vậy bạn cần một số loại ánh xạ tới cấu trúc mong muốn. Hoặc sử dụng ánh xạ cơ bản được tích hợp vào trình điều khiển java (bạn đang đi đúng hướng bằng cách gọi BasicDBObject.puthere là một số ý tưởng khác) hoặc sử dụng một cái gì đó như Morphia để lập bản đồ mở rộng.

0

What would the best/easiest way be to save this data? Is there a way to put the map straight into the mongo DB? Or would I have to loop over the map? Bản đồ có thể được thêm trực tiếp vào BasicDBObject thông qua hàm tạo. Điều này có thể được chèn trực tiếp vào db mà không cần lặp lại.

Would be even better is I could just put the DBCursor object back into the database. 

DBCursor thực hiện iterator, vì vậy nó không thể được đưa trở lại trong db mà không lặp

2

kẻ Ok, tôi đã nhận nó làm việc.

String[] values = req.getParameterValues("departments"); 
Map<Object,Object> map = new HashMap<Object,Object>(); 

DBCollection collection = database.getCollection("Departments"); 
BasicDBObject query = new BasicDBObject(); 
query.put("id", new BasicDBObject("$in", values)); 
DBCursor cursor = collection.find(query); 



if(aDBCursor.hasNext()){ 
     DBObject aDbObject=aDBCursor.next(); 
     aDbObject.put("title", "Test Title"); 
     aDbObject.put("department", cursor); 
     collection.save(aDbObject); 
    } 

Đơn giản như vậy!

Cảm ơn tất cả các câu trả lời và đề xuất của bạn!

Các vấn đề liên quan