17 个不稳定版本

0.9.0 2021年2月17日
0.9.0-alpha.22020年9月3日
0.9.0-alpha.12020年6月12日
0.8.0 2018年12月30日
0.5.0 2017年11月27日

#1895 in 数据库接口

Download history 79/week @ 2024-03-11 51/week @ 2024-03-18 30/week @ 2024-03-25 400/week @ 2024-04-01 237/week @ 2024-04-08 39/week @ 2024-04-15 37/week @ 2024-04-22 60/week @ 2024-04-29 18/week @ 2024-05-06 24/week @ 2024-05-13 28/week @ 2024-05-20 20/week @ 2024-05-27 37/week @ 2024-06-03 9/week @ 2024-06-10 23/week @ 2024-06-17 42/week @ 2024-06-24

每月114次下载

Apache-2.0

41KB
527

wither

一个基于官方 MongoDB Rust 驱动 的 MongoDB ODM。请在 github 上 ⭐ 支持!

Build Status Crates.io docs.rs License Crates.io


此项目的首要目标是提供一个简单、合理且可预测的接口,用于访问 MongoDB 数据模型。如果此系统在任何时候可能妨碍您,您可以直接访问底层的驱动程序。该项目针对 MongoDB 3.64.04.2 以及 4.4 进行了测试。

好消息! Wither 现在基于官方 MongoDB Rust 驱动。感谢驱动程序的进步,Wither 现在完全支持异步操作。Wither 简单地反映了底层 MongoDB 驱动程序的功能,支持以下运行时

由于底层驱动程序的更新,Model trait 以及 Model derive 宏有相当多的不兼容更改。详细信息可以在变更日志和文档中找到。此外,现在默认一切都是异步的,并且已从仓库中完全移除同步接口。

感兴趣的项目

  • 文档:所有精彩内容都在这里。
  • 变更日志:从发布到发布所发生的事情的详细信息。
  • 贡献与发展指南:有关如何开始为此项目进行开发的详细信息。

入门

要开始,只需在您的结构体上派生 Model 以及一些其他 serde 派生。让我们通过一个完整的示例来逐步进行。

use futures::stream::StreamExt;
use serde::{Serialize, Deserialize};
use wither::{prelude::*, Result};
use wither::bson::{doc, oid::ObjectId};
use wither::mongodb::Client;

// Define a model. Simple as deriving a few traits.
#[derive(Debug, Model, Serialize, Deserialize)]
#[model(index(keys=r#"doc!{"email": 1}"#, options=r#"doc!{"unique": true}"#))]
struct User {
    /// The ID of the model.
    #[serde(rename="_id", skip_serializing_if="Option::is_none")]
    pub id: Option<ObjectId>,
    /// The user's email address.
    pub email: String,
}

#[tokio::main]
async fn main() -> Result<()> {
    // Connect & sync indexes.
    let db = Client::with_uri_str("mongodb://localhost:27017/").await?.database("mydb");
    User::sync(&db).await?;

    // Create a user.
    let mut me = User{id: None, email: String::from("[email protected]")};
    me.save(&db, None).await?;

    // Update user's email address.
    me.update(&db, None, doc!{"$set": doc!{"email": "[email protected]"}}, None).await?;

    // Fetch all users.
    let mut cursor = User::find(&db, None, None).await?;
    while let Some(user) = cursor.next().await {
        println!("{:?}", user);
    }
    Ok(())
}

下一步

这就是全部内容。现在您已准备好处理模型生命周期的一些其他重要部分。以下是一些额外要关注的事项

  • 派生模型 - 了解如何在您的结构体上自动派生 Model 特性。
  • 模型使用 - 查看模型提供的一些其他方法。
  • 同步索引 - 了解如何将模型索引与数据库同步。
  • 日志记录 - 了解如何连接到该软件包的日志机制。
  • 迁移 - 了解如何定义要针对模型集合运行的迁移。

祝您旅途愉快。

依赖关系

~24–41MB
~736K SLoC