17 个不稳定版本
0.9.0 | 2021年2月17日 |
---|---|
0.9.0-alpha.2 | 2020年9月3日 |
0.9.0-alpha.1 | 2020年6月12日 |
0.8.0 | 2018年12月30日 |
0.5.0 | 2017年11月27日 |
#1895 in 数据库接口
每月114次下载
41KB
527 行
wither
一个基于官方 MongoDB Rust 驱动 的 MongoDB ODM。请在 github 上 ⭐ 支持!
此项目的首要目标是提供一个简单、合理且可预测的接口,用于访问 MongoDB 数据模型。如果此系统在任何时候可能妨碍您,您可以直接访问底层的驱动程序。该项目针对 MongoDB 3.6
、4.0
、4.2
以及 4.4
进行了测试。
好消息! Wither 现在基于官方 MongoDB Rust 驱动。感谢驱动程序的进步,Wither 现在完全支持异步操作。Wither 简单地反映了底层 MongoDB 驱动程序的功能,支持以下运行时
tokio-runtime
(默认)激活 tokio 运行时。async-std-runtime
激活 async-std 运行时。
由于底层驱动程序的更新,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