База данных Mongo сохраняет данные с карты - PullRequest
5 голосов
/ 24 июля 2011

У меня есть следующий код, который работает:

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);
}

Однако у меня есть данные для Департамента A и B на карте вроде:

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

Что будет лучшим / самым простымспособ сохранить эти данные?Есть ли способ поместить карту прямо в базу данных Монго?Или мне пришлось бы зацикливаться на карте?

Данные, которые входят в карту, уже взяты из базы данных примерно так:

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);   

Было бы еще лучше, если бы я мог просто поставитьобъект DBCursor возвращается в базу данных.

Есть идеи?

Спасибо за любую помощь или предложения!

Ответы [ 3 ]

6 голосов
/ 25 июля 2011

Собственные типы Java (int, float, String, Date, Map, и т. Д.) Будут автоматически кодироваться в правильный тип BSON, поэтому вы можете использовать BasicDBObject для установки Map прямо в коллекцию монго:

// 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));

Однако, похоже, что у вашего Map на самом деле нет нужной структуры, поэтому вам нужно какое-то отображение на желаемую структуру.Либо используйте базовое сопоставление, встроенное в драйвер java (вы на правильном пути, набрав BasicDBObject.put, а здесь и другие идеи), либо используйте что-то вроде Morphia для расширенного сопоставления.

3 голосов
/ 25 июля 2011

Хорошо, ребята, у меня все получилось.

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);
    }

Так просто!

Спасибо за все ваши ответы и предложения!

0 голосов
/ 25 июля 2011

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?Карта может быть непосредственно добавлена ​​в BasicDBObject через сам конструктор. Она может быть непосредственно вставлена ​​в БД без итерации.

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

DBCursor реализует итератор, поэтому ее нельзя вернуть в БД без итерации

...