Как сопоставить пользовательский тип в Ming ODM?
Я нахожусь в процессе настройки отображения в Ming ODM. Одна из возникших проблем заключается в том, как сопоставить пользовательский тип с полем и как передать этот пользовательский тип в поле. .query
По сути, у меня есть объект для представления идентификатора клиента. Я бы хотел, чтобы FieldProperty принимал и возвращал объект этого типа, а не один из встроенных типов. Тип можно преобразовать в и из int, и он будет храниться как int в Mongo, но в модели данных и другом коде Python я хочу передать его как этот тип, специфичный для предметной области.
При передаче экземпляра типа Customer ID непосредственно в качестве аргумента kwd .query
PyMongo жалуется, что не понимает тип.
1 ответ
Недавно я хотел сделать что-то подобное; хранение IP-адресов в виде двоичных данных в MongoDB через Ming. (Причина этого состояла в том, чтобы разрешить эффективные запросы CIDR.) Я предоставляю свое решение для всех, кто сталкивается с этим вопросом, пытаясь сделать то же самое, даже если может быть слишком поздно, чтобы помочь @kbluck.
Я сделал эту работу, хотя хитрость сделать мой класс IP-адреса подклассом bson.Binary
(Я использую Python 2; для Python 3, подкласс встроенного binary
тип будет использоваться вместо).
Вы бы сделали свой CustomerID
класс подкласс int
, CustomerID
класс должен иметь полиморфный конструктор, который принимает int
(для при загрузке из базы данных), CustomerID
экземпляр (конструктор копирования) и любой конструктор, который необходимо использовать приложению (в моем примере строка представления IP-адреса).
Это не совсем то, что вы просили; FieldProperty принимает либо int
или ваш тип и возвращает специальный int
который знает, как конвертировать в ваш тип.
Я загрузил полный пример (IP-адресов) в виде гист: https://gist.github.com/3854792