1 个不稳定发布
0.1.0 | 2023年12月18日 |
---|
#144 在 #mongo-db
用于 rm_orm
20KB
263 代码行
Spark-ORM:Rust的MongoDB ORM库
Spark-ORM是一个高性能、开源的对象关系映射(ORM)库,专门为MongoDB设计,旨在无缝地将Rust结构体与MongoDB集合桥接,轻松将结构体转换为模型。
功能
-
派生模型:使用
Model
特征派生轻松将Rust结构体转换为MongoDB模型。 -
自定义集合名称:使用
#[coll_name]
属性自定义模型集合名称。 -
内存效率:Spark-ORM专为速度和内存效率而构建,为MongoDB提供非堆内存的ORM解决方案。
入门指南
-
通过简单地应用
Model
属性并使用coll_name
设置集合名称来定义您的模型。#[Model(coll_name = "users")] #[derive(Serialize, Deserialize, Default, Debug)] struct User { age: u32, name: String, email: String, }
-
以两种方式之一连接到数据库
a. 建立全局连接
Spark::global_connect("root", "123", "localhost", "6789", "rm_orm_db").await;
b. 或者本地连接
Spark::connect("root", "123", "localhost", "6789", "rm_orm_db").await;
对于全局连接,Spark在整个程序中保留它,可通过以下方式访问:
Spark::get_db();
用法
实例化模型
let mut user = User::new_model(Some(&db));
或者使用全局连接
let mut user = User::new_model(None);
如果您未设置全局连接,则new_model函数将引发panic
更新属性
user.name = "Hossein".to_string();
user.age = 22;
保存到数据库
user.save().await.unwrap();
查找模型
let mut user_model = User::new_model(Some(&db));
let mut sample = User::default ();
sample.name = "Hossein".to_string();
let founded = user_model.find_one(
sample,
None,
).await.unwrap();
println!("The founded object {:?} ", founded);
更新并保存
let mut user = User::new_model(Some(&db));
user.name = "Hossein".to_string();
user.email = "spark_orm_test".to_string();
user.save().await;
user.name = "Nothing".to_string();
user.save().await;
或者
let db = get_db().await;
let user_model = User::new_model(Some(&db));
let updated = user_model.update(
doc! {
"name": "Hossein",
},
doc! {
"$set": {
"name": "Hossein 33"
}
},
None,
).await.unwrap();
println!("The Updated info {:?}", updated);
删除记录
let mut user = User::new_model(Some(&db));
user.delete().await;
注意:您可以使用?
代替unwrap
模型
模型特征为您的结构体添加_id、时间戳(created_at、updated_at、deleted_at),并自动填充。
属性
为结构体字段定义索引或唯一属性
#[Model(coll_name = "products")]
#[derive(Serialize, Deserialize, Default, Debug)]
struct Product {
#[index]
age: u32,
#[index]
name: String,
#[unique]
email: String,
}
这些索引在Product首次初始化时注册。
我非常感谢您在GitHub上的支持。请考虑给我一个star以表示您的支持。谢谢!
请注意,库正在开发中,未来可能会有很多变化,甚至包括其基本功能
依赖项
~310–780KB
~18K SLoC