#mongo-db #bson #nosql

已撤回 mongodb-h2co3

在MongoDB实验室下开发的MongoDB原生驱动

使用旧的Rust 2015

0.3.11 2018年11月12日

#26 in #mongodb

Apache-2.0

405KB
7.5K SLoC

包含(JAR文件,47KB) gradle-wrapper.jar

Crates.io docs.rs License

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_sslClientOptions::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