使用旧的Rust 2015
0.3.11 |
|
---|
#26 in #mongodb
405KB
7.5K SLoC
包含(JAR文件,47KB) gradle-wrapper.jar
MongoDB Rust Driver Prototype
此分支包含为Rust 1.x和MongoDB 3.0.x编写的新驱动程序的开发活动。
API和实现目前可能随时更改。您不应在生产环境中使用此驱动程序,因为它仍在开发中,并且MongoDB Inc.不会以任何方式支持它。我们强烈鼓励您尝试使用它,并就API、设计和实现提供反馈。欢迎提交错误报告和改进建议,以及拉取请求。
注意:此驱动程序目前仅支持MongoDB 3.0.x至3.6.x。此驱动程序不预期与MongoDB 2.6或更早版本一起工作。如果您需要支持其他版本的MongoDB,请勿使用此驱动程序。
安装
依赖关系
导入
驱动程序在crates.io上可用。要在您的代码中使用MongoDB驱动程序,请将bson和mongodb包添加到您的Cargo.toml
[dependencies]
bson = "0.13.0"
mongodb_h2co3 = "0.3.11"
或者,您可以使用具有SSL支持的MongoDB驱动程序。为此,您必须在系统上安装OpenSSL。然后,在Cargo.toml中为MongoDB启用ssl
功能
[dependencies]
# ...
mongodb-h2co3 = { version = "0.3.11", features = ["ssl"] }
然后,在您的代码中导入bson和驱动程序库。
#[macro_use(bson, doc)]
extern crate bson;
extern crate mongodb_h2co3;
示例
以下是驱动程序使用的基本示例
use bson::Bson;
use mongodb_h2co3::{Client, ThreadedClient};
use mongodb_h2co3::db::ThreadedDatabase;
fn main() {
let client = Client::connect("localhost", 27017)
.expect("Failed to initialize standalone client.");
let coll = client.db("test").collection("movies");
let doc = doc! {
"title": "Jaws",
"array": [ 1, 2, 3 ],
};
// Insert document into 'test.movies' collection
coll.insert_one(doc.clone(), None)
.ok().expect("Failed to insert document.");
// Find the document and receive a cursor
let mut cursor = coll.find(Some(doc.clone()), None)
.ok().expect("Failed to execute find.");
let item = cursor.next();
// cursor.next() returns an Option<Result<Document>>
match item {
Some(Ok(doc)) => match doc.get("title") {
Some(&Bson::String(ref title)) => println!("{}", title),
_ => panic!("Expected title to be a string!"),
},
Some(Err(_)) => panic!("Failed to get next from server!"),
None => panic!("Server returned no results!"),
}
}
要使用SSL连接,请使用ClientOptions::with_ssl
或ClientOptions::with_unauthenticated_ssl
,然后使用Client::connect_with_options
。之后,可以使用客户端按上述方式使用(请注意,服务器必须配置为接受SSL连接,并且您必须生成自己的密钥和证书)
use bson::Bson;
use mongodb_h2co3::{Client, ClientOptions, ThreadedClient};
use mongodb_h2co3::db::ThreadedDatabase;
fn main() {
// Path to file containing trusted server certificates.
let ca_file = "path/to/ca.crt";
// Path to file containing client certificate.
let certificate = "path/to/client.crt";
// Path to file containing the client private key.
let key_file = "path/to/client.key";
// Whether or not to verify that the server certificate is valid. Unless you're just testing out something locally, this should ALWAYS be true.
let verify_peer = true;
let options = ClientOptions::with_ssl(ca_file, certificate, key_file, verify_peer);
let client = Client::connect_with_options("localhost", 27017, options)
.expect("Failed to initialize standalone client.");
// Insert document into 'test.movies' collection
coll.insert_one(doc.clone(), None)
.ok().expect("Failed to insert document.");
...
}
测试
驱动程序测试套件主要由集成测试和行为单元测试组成,依赖于官方的MongoDB规范仓库。
彻底测试驱动程序的最简单方法是设置您的分支与TravisCI一起使用。但是,如果您更愿意在本地测试驱动程序,则需要设置集成和规范测试。
注意:每个集成测试使用唯一的数据库/集合,以便可以并行化测试,并在运行之前删除其依赖项。但是,不会清理后续效果。
设置集成测试
所有集成测试都在默认的MongoDB端口,即27017上运行。在运行测试之前,请确保已经设置了一个监听该端口的测试数据库。
如果您还没有安装mongodb,可以从MongoDB下载中心下载并安装一个版本。您可以在travis配置中看到正在Travis上测试的所有版本的完整列表。
安装完成后,在27017上运行MongoDB服务器
mkdir -p ./data/test_db
mongod --dbpath ./data/test_db
设置规范子模块
将规范子模块拉取到tests/json/data/specs
。
git submodule update --init
运行测试
像常规Rust程序一样运行测试
cargo test --verbose
依赖关系
~11MB
~212K SLoC