1 个不稳定发布
0.1.0 | 2023年12月17日 |
---|
#143 in #mongo-db
20KB
263 行
Spark-ORM:Rust语言的MongoDB ORM库
Spark-ORM是一个高性能、开源的对象关系映射(ORM)库,专为MongoDB设计,在Rust中无缝地将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以表示您的支持。谢谢!
请注意,该库正在开发中,未来可能会有很多变化,甚至在基本功能上。
依赖关系
~285–750KB
~17K SLoC