You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:20:20