10个版本
使用旧的Rust 2015
0.6.7 | 2020年6月9日 |
---|---|
0.6.6 | 2020年3月18日 |
0.6.4 | 2020年2月25日 |
0.6.2 | 2019年12月4日 |
0.4.0 | 2019年11月25日 |
#8 in #bson
90 每月下载量
340KB
8K SLoC
欢迎社区贡献!让我们一起使MongoDB的Rust支持变得可用:)
MongoDB CWAL - 为无法再等待的人提供的MongoDB Rust驱动程序
这个Rust驱动程序是从一个不受支持的Rust MongoDB驱动程序原型mongo-rust-driver-prototype中分叉而来的,并添加了补丁以使其适合生产使用。由于官方Rust MongoDB驱动程序尚未推出,我们决定分叉原始版本并对其进行改进。
支持MongoDB 3.x和4.x,包括副本集。
以下是已做的重大变更和修复列表
- MongoDB 4.x支持
- 副本集支持
- R2D2连接池
- BSON性能优化
- 修复连接和内存泄漏
安装
依赖项
导入
驱动程序在crates.io上可用。要在代码中使用MongoDB驱动程序,请将bson和mongodb包添加到您的 Cargo.toml
文件中
[dependencies]
mongodb = { package = "mongodb_cwal", version = "0.4" }
或者,您可以使用支持SSL的MongoDB驱动程序。为此,您必须在您的系统上安装OpenSSL。然后,在Cargo.toml中为MongoDB启用 ssl
功能
[dependencies]
mongodb = { package = "mongodb_cwal", version = "0.4", features = ["ssl"] }
然后,在您的代码中导入bson和驱动程序库。
#[macro_use(bson, doc)]
extern crate mongodb;
或者使用Rust 2018
use mongodb::{bson, doc};
示例
以下是一个驱动程序使用的基本示例
use mongodb::{Bson, bson, doc};
use mongodb::{Client, ThreadedClient};
use mongodb::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 mongodb::{Bson, bson, doc};
use mongodb::{Client, ClientOptions, ThreadedClient};
use mongodb::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.");
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.");
...
}
测试
驱动程序测试套件主要由集成测试和行为单元测试组成,依赖于官方的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
依赖项
~18–26MB
~396K SLoC