5

私は動作する以下のコードを持っています:

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

このデータを保存するための最良/最も簡単な方法は何ですか? マップをmongo DBに直接入れる方法はありますか? または、マップをループする必要がありますか?

マップに既に入っているデータは、次のようにデータベースから取得されます。

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 オブジェクトをデータベースに戻すことができればさらに良いでしょう。

何か案は?

助けや提案をありがとう!

4

3 に答える 3

9

ネイティブ Java 型 ( intfloatString、など) はDateMap,適切な BSON 型に自動的にエンコードされるため、 を使用して mongo コレクション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 のようなものを使用します

于 2011-07-25T03:25:36.220 に答える
4

わかりました、私はそれを働かせました。

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

それと同じくらい簡単です!

すべての返信と提案に感謝します!

于 2011-07-25T10:02:32.503 に答える
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? Map は、コンストラクター自体を介して BasicDBObject に直接追加できます。これは、反復せずに db に直接挿入できます。

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

DBCursor は反復子を実装しているため、反復せずに db に戻すことはできません

于 2011-07-25T03:26:20.483 に答える