1

私のプロジェクトでは、BasicDBObject を拡張する ClickScoreTuple というクラスを作成します。(そうしないと、シリアライズ可能の問題が発生します)。

次に、以下のコードを使用して ClickScoreTuple を挿入します

public void insertToMongodb(String q, ClickScoreTuple cs){

    BasicDBObject doc = new BasicDBObject();
    doc.put("query", q);
    doc.put("clicks", cs);
    coll.insert(doc);
}

以下のコードを使用して、MongoDB からデータを取得します。

public ClickScoreTuple retrieveFromMongodb(String q){

    BasicDBObject query = new BasicDBObject();

    query.put("query", q);
    DBCursor cursor = coll.find(query);

    **ClickScoreTuple result = (ClickScoreTuple) cursor.next();**
    cursor.close();
    return result;
}

ただし、次のような問題が発生します。

Exception in thread "main" java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to ClickScoreTuple
at MongoDBManager.retrieveFromMongodb(MongoDBManager.java:50)
at UserLogHistoryProcessor.processLogHistory(UserLogHistoryProcessor.java:30)
at UserLogHistoryProcessor.main(UserLogHistoryProcessor.java:108)

誰かがそれを解決するために鍬を知っていますか?

4

2 に答える 2

1

オブジェクト クラス タイプを設定する必要があります....オブジェクトを保存して取得する前に、 DBCollectionのsetObjectClassメソッドを使用します....あなたの場合、それは --

coll.setObjectClass(ClickScoreTuple.class);

于 2015-05-22T11:33:34.320 に答える
0

親は子への参照を保持できますが、その逆はできません。子を返すようにメソッドがコーディングされていないため、DBObject手動でマップする必要があります。ClickScoreTupleDBCursor.next()

于 2012-11-27T05:03:35.233 に答える