¿Cómo mapear un tipo personalizado en Ming ODM?
Frecuentes
Visto 211 veces
0
Estoy en proceso de configurar un mapeo en Ming ODM. Un problema que ha surgido es cómo asignar un tipo personalizado a un campo y cómo pasar ese tipo personalizado a .query
Básicamente, tengo un objeto para representar una ID de cliente. Me gustaría que FieldProperty tome y devuelva un objeto de este tipo, en lugar de uno de los tipos integrados. El tipo es convertible desde y hacia un int, y se almacenará como un int en Mongo, pero en el modelo de datos y otro código de Python quiero pasarlo como este tipo específico de dominio.
Al pasar una instancia del tipo CustomerID directamente como un argumento kwd a .query
, PyMongo se queja de que no entiende el tipo.
1 Respuestas
2
Hace poco quise hacer algo similar; almacenar direcciones IP como datos binarios en MongoDB a través de Ming. (La razón de esto fue permitir consultas CIDR eficientes). Estoy proporcionando mi solución para cualquier otra persona que se encuentre con esta pregunta mientras intenta lo mismo, aunque puede ser demasiado tarde para ayudar a @kbluck.
Hice que esto funcionara con el truco de hacer que mi clase de dirección IP sea una subclase de bson.Binary
(Estoy usando Python 2; para Python 3, una subclase de la función integrada binary
type se usaría en su lugar).
harías tu CustomerID
clase una subclase de int
. La CustomerID
la clase necesita tener un constructor polimórfico que acepte un int
(para cuando se carga desde la base de datos), un CustomerID
instancia (constructor de copia) y cualquier constructor que la aplicación necesite usar (en mi ejemplo, una cadena de presentación de dirección IP).
Esto no es exactamente lo que pediste; FieldProperty toma ya sea un int
o su tipo y devuelve un especial int
que sabe convertirse a tu tipo.
He subido un ejemplo completo (de direcciones IP) como esencia: https://gist.github.com/3854792
Respondido 08 Oct 12, 21:10
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python mongodb pymongo ming or haz tu propia pregunta.