6个版本 (2个稳定版)
2.0.0 | 2024年8月16日 |
---|---|
1.0.0 | 2024年6月27日 |
0.3.0 | 2024年5月13日 |
0.2.2 | 2024年1月13日 |
0.1.0 | 2023年11月2日 |
#32 在 #indexed
每月335次下载
在 2 个crate中使用 (通过 mongo_indexed)
5KB
111 代码行
直接在Rust结构体上配置Mongo索引
示例
use mongo_indexed::doc;
use mongo_indexed_derive::MongoIndexed;
use mongodb::{bson::oid::ObjectId, options::ClientOptions};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, MongoIndexed)]
#[unique_doc_index({ "username": 1, "email": 1 })]
#[collection_name(users)] // By default, this will be the name of the struct it's defined on, in this case 'User'.
pub struct User {
#[serde(rename = "_id")]
pub id: ObjectId,
#[index]
pub username: String,
#[index]
pub email: String,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// instantiate your mongo client
let mongo =
mongodb::Client::with_options(ClientOptions::parse("mongodb://127.0.0.1:27017").await?)?;
let db = mongo.database("my-db");
// Since index calls are a no-op if the indexes do not change, your APIs can
// safely use create_indexes = true even when restarting all the time.
// Just be careful if the indexes change and the collection is large.
let create_indexes = true;
// will return a handle to 'users' collection on 'my-db', which has the specified indexes created.
let users = mongo_indexed::collection::<User>(&db, create_indexes).await?;
let user = users.find_one(doc! { "username": "mogh" }, None).await?;
println!("{user:?}");
Ok(())
}
依赖关系
~225–660KB
~16K SLoC