2017-07-14 5 views
1

Java 3.4.2ドライバを使用してMongoDBからblob(バイナリ)レコードを読み取ることができません。Javaを使用してmongodbからblob(バイナリ)データを読み取る際にエラーが発生しました。

BasicDBObject whereClause = new BasicDBObject(); 
    List<BasicDBObject> obj = new ArrayList<BasicDBObject>(); 
    obj.add(new BasicDBObject("blobcontentid", "20160601201035069394000000")); 
    whereClause.put("$and", obj); 

    MongoCursor<Document> cursor = contentcollection.find(whereClause).iterator(); 

    while (cursor.hasNext()) { 
     Document object = cursor.next(); 
     System.out.println(object.getString("blobcontentid")); 
     if (object.get("content") != null){ 
      byte[] content = (byte []) object.get("content"); 
     } else { 
      System.out.println("Content is empty"); 
     }   
    } 

エラー:java.lang.ClassCastExceptionが:org.bson.types.Binaryは[B

同じレコードにキャストすることはできませんが、DB2では次のように読んでいます。 byte [] content = aResult.getBytes( "CONTENT");

ありがとうございます! Bharathi

+0

実際には、「バイナリ」で定義された['.getData()'](http://api.mongodb.com/java/current/org/bson/types/Binary.html#getData--)メソッドがあります。 'タイプ。どちらがもちろん 'byte [] 'を返すので、そのようなキャストを強制する必要はありません。ちょうど正しい方法を使用してください。 –

答えて

4

これを実現するにはget() method on a Document with built-in castingを使用できます。

// Insert a binary data (byte array) into the database 
Document document = new Document("blob", "This is a byte array blob".getBytes()); 
collection.insertOne(document); 

// Find and print the inserted byte array as String 
for (Document doc : collection.find()) { 
    Binary bin = doc.get("blob", org.bson.types.Binary.class); 
    System.out.println(new String(bin.getData())); 
} 

バックコンソールにデータベースに挿入されたThis is a byte array blobを印刷する:例えば。もしBSON 16MB document size limitationによるバイナリデータの大きなブロブを挿入する場合は、この方法が機能しない可能性があること

> db.collection.find() 
{ 
    "_id": ObjectId("5976e23911e6772c5d32c42d"), 
    "blob": BinData(0, "VGhpcyBpcyBhIGJ5dGUgYXJyYXkgYmxvYg==") 
} 

注:

データベースは、挿入操作の結果としてBinData要素を含むであろう。 16MBを超えるバイナリデータを挿入する必要がある場合は、代わりにGridFSを使用することをお勧めします。

+0

ありがとうございます@ケヴィンAdistambha –

関連する問題