无法连接到rust中的MongoDB Atlas DBs

无法连接到rust中的MongoDB Atlas DBs,mongodb,rust,mongodb-atlas,Mongodb,Rust,Mongodb Atlas,我是n00b to,正在尝试使用Now Lucky连接到MongoDB Atlas MongoDB 4.0版集群上的数据库 在Atlas中,我提供了防火墙访问权限,可以从我的家庭IP连接,因此这不是权限/访问问题。我搜索了错误,但在这个主题上没有找到太多帮助。看起来mongodb锈菌驱动程序还很年轻,还没有完全成熟 我犯的错误是: thread'main'在错误值为OperationError(“没有可用于提供的ReadPreference的服务器”)的情况下,在调用Result::unwrap

我是n00b to,正在尝试使用Now Lucky连接到MongoDB Atlas MongoDB 4.0版集群上的数据库

在Atlas中,我提供了防火墙访问权限,可以从我的家庭IP连接,因此这不是权限/访问问题。我搜索了错误,但在这个主题上没有找到太多帮助。看起来mongodb锈菌驱动程序还很年轻,还没有完全成熟

我犯的错误是:

thread'main'在错误值为OperationError(“没有可用于提供的ReadPreference的服务器”)的情况下,在调用Result::unwrap()时惊慌失措。

回溯详情如下:

运行`target/debug/gigs内核`
线程'main'在'Err'值上的'Result::unwrap()'处惊慌失措:“没有可用于提供的ReadPreference的服务器。”),src/libcore/Result.rs:1165:5
堆栈回溯:
0:backtrace::backtrace::libunwind::trace
在/Users/runner/.cargo/registry/src/github.com-1ec6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
1:backtrace::backtrace::trace\u未同步
位于/Users/runner/.cargo/registry/src/github.com-1ec6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
2:std::sys\u common::backtrace::\u print\u fmt
在src/libstd/sys_common/backtrace.rs:77
3:::fmt
在src/libstd/sys_common/backtrace.rs:61
4:core::fmt::write
在src/libcore/fmt/mod.rs:1028
5:std::io::Write::Write\u fmt
在src/libstd/io/mod.rs:1412
6:std::sys_common::backtrace::\u打印
在src/libstd/sys_common/backtrace.rs:65
7:std::sys_common::backtrace::print
在src/libstd/sys_common/backtrace.rs:50
8:std::panicking::default_hook::{{closure}
在src/libstd/panicking.rs:188
9:std::panicking::default\u hook
在src/libstd/panicking.rs:205
10:std::恐慌::生锈\u恐慌\u带钩
在src/libstd/panicking.rs:464
11:std::恐慌::继续恐慌\u fmt
在src/libstd/panicking.rs:373
12:生锈\u开始\u放松
在src/libstd/panicking.rs:302
13:核心::恐慌::恐慌
在src/libcore/panicking.rs:139
14:核心::结果::展开失败
在src/libcore/result.rs:1165
15:核心::结果::结果::展开
at/rustc/91fd6283e658e2c7aab2d3f5206fc1891f486af2/src/libcore/result.rs:933
16:gigs_core::main
在src/main.rs:12
17:std::rt::lang_start:{{closure}
at/rustc/91fd6283e658e2c7aab2d3f5206fc1891f486af2/src/libstd/rt.rs:61
18:std::rt::lang_start_internal:{{closure}
在src/libstd/rt.rs时:48
19:std::恐慌::尝试::打电话
在src/libstd/panicking.rs:287
20:\u生锈\u可能\u引起恐慌\u
在src/libpanic_unwind/lib.rs:83
21:std::恐慌::尝试
在src/libstd/panicking.rs:265
22:std::惊慌::抓你放松
在src/libstd/panic.rs:396
23:std::rt::lang\u start\u内部
在src/libstd/rt.rs:47
24:std::rt::lang\u开始
at/rustc/91fd6283e658e2c7aab2d3f5206fc1891f486af2/src/libstd/rt.rs:61
25:gigs_core::main
下面是我运行的代码,其中显然提取了cred:

使用mongodb::{Bson,Bson,doc};
使用mongodb::{Client,ThreadedClient};
使用mongodb::db::ThreadedDatabase;
fn main(){
让mongodb_uri=String::from(“mongodb://cluster0-kbbbhky.mongodb.net:2017, \
cluster0-shard-00-00-kbbbhky.mongodb.net:27017\
cluster0-shard-00-00-kbbbhky.mongodb.net:27017/“
);
让client=client::with_uri(&mongodb_uri)
.expect(“初始化客户端失败”);
client.db(“admin”).auth(“用户名”、“密码”).unwrap();
让coll=client.db(“gigs_core”).集合(“事件”);
让cursor=coll.find(无,无).unwrap();
对于游标中的结果{
如果让Ok(项目)=结果{
如果让某些(&Bson::String(ref name))=item.get(“name”){
println!(“名称:{}”,名称);
}
}
}
}

有人对使用rust连接MongoDB Atlas DB有什么建议吗?

我以前遇到过类似的问题,并通过使用
和\u unauthenticated\u ssl
选项修复了它。 (看起来MongoDB Atlas需要SSL连接。)

首先,编辑
Cargo.toml
以启用
mongodb的
ssl
功能

mongodb = { version = "0.4.0", features = ["ssl"] }
然后使用
和\u unauthenticated\u ssl
选项创建客户端

使用mongodb::{Bson,Bson,doc};
使用mongodb::{Client,ClientOptions,ThreadedClient};
使用mongodb::db::ThreadedDatabase;
fn main(){
让mongodb_uri=String::from(“mongodb://cluster0-kbbbhky.mongodb.net:2017, \
cluster0-shard-00-00-kbbbhky.mongodb.net:27017\
cluster0-shard-00-00-kbbbhky.mongodb.net:27017/“
);
//定义选项
让opts=ClientOptions::with_unauthenticated_ssl(None,false);
//使用选项初始化
let client=client::with_uri_和_选项(&mongodb_uri,opts)
.expect(“初始化客户端失败”);
client.db(“admin”).auth(“用户名”、“密码”).unwrap();
让coll=client.db(“gigs_core”).集合(“事件”);
让cursor=coll.find(无,无).unwrap();
对于游标中的结果{
如果让Ok(项目)=结果{
如果让某些(&Bson::String(ref name))=item.get(“name”){
println!(“名称:{}”,名称);
}
}
}
}
另外,您的
mongodb_uri
看起来不正确。你也应该检查一下

参考:


(参考资料说您需要启用
“ssh”
功能,但这是一个输入错误。
mongodb
crate没有这样的功能。)

我以前遇到过类似的问题,并通过使用
with_unauthenticated_ssl
选项修复了它。 (看起来MongoDB Atlas需要SSL连接。)

首先,编辑
Cargo.toml
以启用
的“ssl”
功能