使用Java从mongodb读取blob(二进制)数据时出错

Bha*_*a S 2 java mongodb mongodb-java

我无法使用Java 3.4.2驱动程序从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");
        }           
    }
Run Code Online (Sandbox Code Playgroud)

错误:java.lang.ClassCastException:org.bson.types.Binary无法转换为[B

在DB2中,相同的记录正在读取。byte [] content = aResult.getBytes(“ CONTENT”);

先感谢您!巴拉提

kev*_*adi 5

您可以get()Document内置铸造使用上的方法来实现此目的。例如:

// 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()));
}
Run Code Online (Sandbox Code Playgroud)

它将打印This is a byte array blob出已插入数据库的内容并返回到控制台。

BinData由于插入操作,数据库将包含一个元素:

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

请注意,由于BSON 16MB文档大小的限制,如果要插入较大的二进制数据块,则此方法可能不起作用。如果您需要插入超过16MB的二进制数据,我建议改用GridFS