mongoCollection.find查询出的文件如何转为二进制
时间: 2024-03-08 16:48:27 浏览: 18
在MongoDB中,二进制数据通常以`org.bson.types.Binary`对象的形式存储。要将从MongoDB中查询出的二进制数据转换为字节数组,请按照以下步骤操作:
1. 获取查询结果中的Binary对象:
```
Document doc = mongoCollection.find(eq("_id", objectId)).first();
Binary binary = (Binary) doc.get("binaryDataField");
```
2. 从Binary对象中获取字节数组:
```
byte[] bytes = binary.getData();
```
现在,`bytes`数组包含的就是从MongoDB查询出的二进制数据。如果您需要将其转换回原始类型(如图像或音频文件),您需要使用适当的库和工具进行解码。希望这可以帮助您将查询结果中的二进制数据转换为字节数组!
相关问题
mongocollection.find读取的文件如何转为二进制数据
使用 `GridFS` 可以将文件存储到 MongoDB 数据库中,并且可以使用 `GridFS` 读取文件并将其转换为二进制数据。
以下是将文件存储到 MongoDB 数据库中的示例代码:
```java
import com.mongodb.MongoClient;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
import org.bson.Document;
import org.bson.types.ObjectId;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class StoreFileToMongoDB {
public static void main(String[] args) throws IOException {
// 连接到 MongoDB 服务器
MongoClient mongoClient = new MongoClient("localhost", 27017);
// 获取 GridFSBucket 对象
GridFSBucket gridFSBucket = GridFSBuckets.create(mongoClient.getDatabase("test"));
// 读取文件并存储到 MongoDB 中
File file = new File("path/to/file");
FileInputStream inputStream = new FileInputStream(file);
ObjectId fileId = gridFSBucket.uploadFromStream(file.getName(), inputStream);
inputStream.close();
// 打印文件 ID
System.out.println(fileId);
// 关闭 MongoDB 连接
mongoClient.close();
}
}
```
以下是使用 `GridFS` 读取文件并将其转换为二进制数据的示例代码:
```java
import com.mongodb.MongoClient;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
import org.bson.types.ObjectId;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ReadFileFromMongoDB {
public static void main(String[] args) throws IOException {
// 连接到 MongoDB 服务器
MongoClient mongoClient = new MongoClient("localhost", 27017);
// 获取 GridFSBucket 对象
GridFSBucket gridFSBucket = GridFSBuckets.create(mongoClient.getDatabase("test"));
// 读取文件并将其转换为二进制数据
ObjectId fileId = new ObjectId("file_id");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
gridFSBucket.downloadToStream(fileId, outputStream);
byte[] binaryData = outputStream.toByteArray();
outputStream.close();
// 关闭 MongoDB 连接
mongoClient.close();
}
}
```
在上面的示例代码中,`file_id` 是文件在 MongoDB 中对应的 ID,需要将其替换为实际的文件 ID。
MongoCollection.projection和MongoCollection.find的区别
MongoCollection.find是用于在集合中查找文档的方法,而MongoCollection.projection则是用于指定在查询结果中返回哪些字段的方法。
具体来说,在MongoCollection.find方法中,可以通过传递一个查询条件对象来限制返回的文档。例如,以下代码将返回所有年龄大于等于18岁的用户文档:
```
collection.find({ age: { $gte: 18 } })
```
而在MongoCollection.projection方法中,可以通过传递一个投影条件对象来指定要返回的字段。例如,以下代码将返回所有用户文档的姓名和年龄字段:
```
collection.projection({ name: 1, age: 1 })
```
需要注意的是,MongoCollection.projection方法必须与MongoCollection.find方法一起使用,以便获取特定的结果集。因此,以下代码将返回所有年龄大于等于18岁的用户文档中的姓名和年龄字段:
```
collection.find({ age: { $gte: 18 } }).projection({ name: 1, age: 1 })
```