Rust 为什么对“find_one”的结果进行匹配会返回一个选项而不是预期的类型?

Rust 为什么对“find_one”的结果进行匹配会返回一个选项而不是预期的类型?,rust,match,Rust,Match,我试图对从MongoDB查询检索的BSONOrderedDocument使用.get方法。为了处理查询中的任何错误,我在查询中使用match操作符 let id: String = "example".to_string(); let doc = match db.media.find_one( Some(doc! { "id" : id }), None, ) { Ok(c) => c, Err(e) => {

我试图对从MongoDB查询检索的BSON
OrderedDocument
使用
.get
方法。为了处理查询中的任何错误,我在查询中使用
match
操作符

let id: String = "example".to_string();

let doc = match db.media.find_one(
    Some(doc! {
        "id" : id
    }),
    None,
) {
    Ok(c) => c,
    Err(e) => {
        // do stuff with the error
        return;
    }
};

println!("{:?}", doc.get("field"));
这将返回最后一行的错误:

错误[E0599]:在当前作用域中找不到类型
std::option::option
的名为
get
的方法


这必须意味着从
匹配
操作返回的类型是
选项
,而不是我预期的
有序文档
。为什么返回类型为
Option
c
变量(在上面的示例中)而不是查询的BSON文档类型,以及如何从
匹配中获取所需的类型?或者这是错误的处理方式?

匹配操作返回的类型是您在其中输入的任何类型。在这种情况下,类型为
c

返回
结果
。由于您的模式仅在
结果
部分匹配,因此您将获得内部
选项
。一种解决方案是使用一些更精确的模式:

let doc = match db.media.find_one(Some(doc! { "id": id }), None) {
    Ok(Some(c)) => c,
    Ok(None) => {
        println!("Nothing found");
        return;
    }
    Err(e) => {
        println!("An error occurred: {:?}", e);
        return;
    }
};