Rust 为什么对“find_one”的结果进行匹配会返回一个选项而不是预期的类型?
我试图对从MongoDB查询检索的BSONRust 为什么对“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) => {
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;
}
};