gpt4 book ai didi

rust - 为什么在 `find_one` 的结果上匹配返回一个 Option 而不是预期的类型?

转载 作者:行者123 更新时间:2023-11-29 08:34:27 24 4
gpt4 key购买 nike

我正在尝试使用 .get BSON 上的方法 OrderedDocument我正在从 MongoDB 查询中检索。为了处理查询中的任何错误,我使用 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"));

最后一行返回错误:

error[E0599]: no method named get found for type std::option::Option<bson::ordered::OrderedDocument> in the current scope

这一定意味着从 match 返回的类型操作是一个 Option ,不是 OrderedDocument如我所料。为什么是c返回的变量(在上面的示例中)类型为 Option而不是查询的 BSON 文档类型,以及如何从 match 返回所需的类型?或者这是错误的处理方式?

最佳答案

match 返回的类型操作就是你放入的任何东西。在这种情况下,类型是 c 的类型.

find_one 返回 Result<Option<Document>> .由于您的模式仅在 Result 上匹配部分,你得到内部 Option .一种解决方案是使用一些更精确的模式:

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;
}
};

关于rust - 为什么在 `find_one` 的结果上匹配返回一个 Option 而不是预期的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56791417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com