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

Error while reading blob (binary) data from mongodb using Java

我无法从 MongoDB 读取 blob(二进制)记录,我正在使用 Java 3.4.2 驱动程序。

    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[]内容=aResult.getBytes("CONTENT");

提前致谢! 巴拉蒂

您可以使用 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 打印回控制台。

作为插入操作的结果,数据库将包含一个 BinData 元素:

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

请注意,由于 BSON 16MB document size limitation. If you need to insert more than 16MB of binary data, I suggest using GridFS 而插入大量二进制数据,此方法可能无效。