如何将bson::raw::RawDocument转为bson::Document及直接从字节数组创建
解决方案:RawDocument转Document及直接从字节数组创建Document
1. 将RawDocument转换为bson::Document
bson::raw::RawDocument 内置了 to_document() 方法,可直接完成转换,只需处理转换过程中可能出现的错误。修改你的Rust代码如下:
fn read_bson_file(){ let mut f = File::open("file.bson").expect("no file found"); let mut buffer = vec![]; f.read_to_end(&mut buffer).expect("failed to read file"); // 补充读取错误处理 println!("buffer size {}", buffer.len()); let res = bson::raw::RawDocument::from_bytes(&buffer); let rawdoc = match res { Ok(raw) => raw, Err(err) => panic!("{:?}", err) }; // 转换为Document let doc = match rawdoc.to_document() { Ok(d) => d, Err(err) => panic!("failed to convert raw document: {:?}", err) }; // 打印验证转换结果 println!("{:#?}", doc); }
2. 直接从字节数组(buffer)创建bson::Document
无需先创建RawDocument,直接使用 bson::from_slice 方法就能将字节数组解析为Document,代码更简洁:
fn read_bson_file(){ let mut f = File::open("file.bson").expect("no file found"); let mut buffer = vec![]; f.read_to_end(&mut buffer).expect("failed to read file"); println!("buffer size {}", buffer.len()); // 直接从buffer创建Document let doc = match bson::from_slice(&buffer) { Ok(d) => d, Err(err) => panic!("failed to parse bson from buffer: {:?}", err) }; println!("{:#?}", doc); }
注意:两种方式都要求输入的字节数组是完整且合法的BSON文档,否则会触发解析错误。
内容的提问来源于stack exchange,提问作者yuser099881232
相关产品推荐
相关产品推荐

