Soy nuevo en Rust y un usuario frecuente de MongoDB. Usualmente uso node.js + Mongoose ODM .
¿Hay algún MongoDB ODM en RUST que implemente un esquema personalizado y ganchos de lógica empresarial como Mongoose ODM? ¿O necesito implementarlo yo mismo dentro del sistema de tipos de Rust?
Este es un ejemplo de Mangosta
const schema = kittySchema = new Schema(..); // they implement the 'meow' method in the Kitty Schema schema.method('meow', function () { console.log('meeeeeoooooooooooow'); }) // so anytime a Kitty schema instance is created const Kitty = mongoose.model('Kitty', schema); const fizz = new Kitty; // fizz as the instance of Kitty Schema automatically has meow() method fizz.meow(); // outputs: meeeeeooooooooooooowQue yo sepa... mongodm-rs no hace eso ni Wither ni Avocado
Es posible que no necesite un ODM. Con serde (que es utilizado por todos esos ODM), el "esquema" se implementa en la estructura misma, por lo que puede agregar cualquier método que desee con un bloque impl . Se vería algo como esto:
use serde::{Deserialize, Serialize}; // Deriving from serde's Serialize and Deserialize, meaning this struct can be converted to and from BSON for storage and retrieval in MongoDB: #[derive(Serialize, Deserialize, Debug)] struct Kitty { name: String, } impl Kitty { fn meow(&self) { println!("{} says 'meeeeeoooooooooooow'", &self.name); } } let fizz = Kitty { name: String::from("Fizz"), }; fizz.meow();Esta estructura se puede almacenar en MongoDB (porque deriva Serialize y Deserialize); para ver cómo, consulte mi publicación de blog Up and Running with Rust and MongoDB . Hay algunos detalles más actualizados sobre cómo usar serde con MongoDB en la publicación de mi colega Isabelle .