使用MongoDB Java驱动程序库,有没有一种方法将bson对象的写入流式传输到文件中,然后稍后从该文件流式传输bson对象的读取。查看文档,我没有看到关于如何对一系列bson对象进行编码以类似于在文件中具有一系列json对象的内容的说明。
MongoDB GridFS是存储和检索文件的规范。
使用GridFS来存储文件-GridFS使用两个集合将文件保存到数据库中:fs.files和fs.chunks。根据文件大小,数据被存储为多个单独的“块”。
* 使用GridFS存储MongoDB文件。请参阅我的帖子
有关GridFS的更多信息,请查看我的Github wiki。
public static void main(String[] args) throws IOException {
mongoDB_GRIDFS("D:\\Yash\\JavaCSV.csv");
}
public static void mongoDB_GRIDFS(String csvlocation) throws IOException{
Mongo Mongo = new Mongo( "localhost" , 27017 ); // Connect to MongoDB
DB db = Mongo.getDB( "DBName" ); // Get database
String bucketName = "BucketName";
GridFS gridFs = new GridFS(db,bucketName); //Create instance of GridFS implementation
String imageName = "image1";
upload(gridFs, csvlocation, imageName);
download(gridFs, imageName);
Mongo.close();
}
public static void upload(GridFS gridFs, String csvlocation, String imageName) throws IOException{
GridFSInputFile gridFsInputFile = gridFs.createFile(new File(csvlocation));
gridFsInputFile.setId("777");
gridFsInputFile.setFilename(imageName); //Set a name on GridFS entry
gridFsInputFile.save(); //Save the file to MongoDB
}
public static void download(GridFS gridFs, String imageName) throws IOException{
GridFSDBFile outputImageFile = gridFs.findOne(imageName);
String outcsvLocation = "D:\\Yash\\mongoCSV.csv";//Location of the file read from MongoDB to be written
outputImageFile.writeTo(new File(outcsvLocation));
}
将CSV文件转换为JSON对象和JSON字符串转换为CSV文件。
CSV_FileOperations
。。Json2Csv(String fileName, String jsonString)
。。将JSON转换为BSON和BSON转换为JSON。
MongoDB Java Driverjar带有用于解析JSON为BSON和序列化BSON为JSON的实用程序方法。
示例。
DBObject dbObj = new Document("myKey", "myValue");
String db_json = com.mongodb.util.JSON.serialize( dbObj );
DBObject bson = ( DBObject ) com.mongodb.util.JSON.parse( jsonData );
System.out.println("BSON Object : "+ bson);
示例输出:
BSON Object : [ { "Key2" : "21" , "Key1" : "11" } , { "Key2" : "22" , "Key1" : "12"}]
Json : {"K1":"V1","K2":"V2"}
Map : {K1=V1, K2=V2}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import org.apache.commons.io.IOUtils;
import org.bson.BsonBinaryReader;
import org.bson.BsonBinaryWriter;
import org.bson.BsonReader;
import org.bson.BsonWriter;
import org.bson.codecs.Codec;
import org.bson.codecs.DecoderContext;
import org.bson.codecs.EncoderContext;
import org.bson.codecs.StringCodec;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.io.BasicOutputBuffer;
public class Bson {
FileOutputStream fop;
FileInputStream fip;
BsonWriter writer;
BsonReader reader;
Codec<Person> codec;
EncoderContext ec;
DecoderContext dc;
BasicOutputBuffer output;
public Bson() {
PojoCodecProvider provider = PojoCodecProvider.builder()
.register(Person.class)
.build();
CodecRegistry registry = CodecRegistries
.fromRegistries(CodecRegistries.fromCodecs(new StringCodec()),
CodecRegistries.fromProviders(provider));
codec = provider.get(Person.class, registry);
ec = EncoderContext.builder().build();
dc = DecoderContext.builder().build();
}
public static void main(String[] args) throws IOException {
Bson bson = new Bson();
// write data
bson.initBsonWriter();
bson.encodePerson(new Person("John", "Doe"));
bson.encodePerson(new Person("John2", "Doe2"));
bson.encodePerson(new Person("John3", "Doe3"));
bson.closeFop();
// read data
bson.initBsonReader();
Person person = bson.decodePerson();
System.out.println(person);
person = bson.decodePerson();
System.out.println(person);
person = bson.decodePerson();
System.out.println(person);
bson.closeFip();
}
public void initBsonWriter() throws IOException {
openFop();
output = new BasicOutputBuffer();
writer = new BsonBinaryWriter(output);
writer.writeStartDocument();
writer.writeName("values");
writer.writeStartArray();
}
public void initBsonReader() throws IOException {
openFip();
reader = new BsonBinaryReader(ByteBuffer.wrap(IOUtils.toByteArray(fip)));
reader.readStartDocument();
reader.readName();
reader.readStartArray();
}
public void encodePerson(Person p) {
codec.encode(writer, p, ec);
}
public Person decodePerson() {
return codec.decode(reader, dc);
}
public void openFop() throws IOException {
File file = new File("example.bson");
fop = new FileOutputStream(file);
// if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}
}
public void closeFop() throws IOException {
writer.writeEndArray();
writer.writeEndDocument();
output.pipe(fop);
fop.flush();
fop.close();
}
public void openFip() throws IOException {
File file = new File("example.bson");
fip = new FileInputStream(file);
}
public void closeFip() throws IOException {
fip.close();
}
}
用于存储一些数据的POJO:
public class Person {
private String firstName;
private String lastName;
public Person() { }
public Person(final String firstName, final String lastName) {
this.firstName = firstName;
this.lastName = lastName;}
public String getFirstName() {
return firstName;
}
public void setFirstName(final String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(final String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return "Person [firstName=" + firstName + ", lastName=" + lastName + "]";
}
}
Person
对象数组的主文档文件。我使用了writer
来创建主文档,这样你就可以轻松地将对象流到数组中。 - Adrian Farmadin