我试图使mongodb文档变得简单明了,以便应用okapi的开放api,该api不允许在struct中使用ObjectId。
但我发现这两种方法都不像
FindOptions::builder().lean().build();
nor
colleciton.find(None, None).lean().await?工作。
如何将MongoDB Document转换为JsonSchema

示例
在此之前
{
_id: ObjectId,
name: String
}之后
{
_id: String,
name: String
}发布于 2022-02-19 08:53:09
可以使用ObjectId作为基础创建自定义结构,并为该自定义结构创建实现JsonSchema。
use mongodb::bson::oid::ObjectId;
use schemars::JsonSchema;
use schemars::schema::Schema;
use schemars::schema::SchemaObject;
use schemars::gen::SchemaGenerator;
use serde::{Serialize, Deserialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct ObjectID(ObjectId);
impl JsonSchema for ObjectID {
fn schema_name() -> String {
stringify!(String).to_owned()
}
fn json_schema(gen: &mut SchemaGenerator) -> Schema {
let mut schema: SchemaObject = <String>::json_schema(gen).into();
schema.number().minimum = Some(1.0);
schema.into()
}
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Customer {
pub _id: ObjectID,
pub name: String
}
fn main() {
let c = Customer{_id: ObjectID(ObjectId::new()), name: String::from("John")};
println!("{:?}", c);
let serialized = serde_json::to_string(&c).unwrap();
println!("serialized = {}", serialized);
let deserialized: Customer = serde_json::from_str(&serialized).unwrap();
println!("deserialized = {:?}", deserialized);
}
// Output
// Customer { _id: ObjectID(ObjectId("6210af6079e3adc888bef5af")), name: "John" }
// serialized = {"_id":{"$oid":"6210af6079e3adc888bef5af"},"name":"John"}
// deserialized = Customer { _id: ObjectID(ObjectId("6210af6079e3adc888bef5af")), name: "John" }https://stackoverflow.com/questions/71085558
复制相似问题