Как сопоставить пользовательский тип в Ming ODM?

Я нахожусь в процессе настройки отображения в Ming ODM. Одна из возникших проблем заключается в том, как сопоставить пользовательский тип с полем и как передать этот пользовательский тип в поле. .query

По сути, у меня есть объект для представления идентификатора клиента. Я бы хотел, чтобы FieldProperty принимал и возвращал объект этого типа, а не один из встроенных типов. Тип можно преобразовать в и из int, и он будет храниться как int в Mongo, но в модели данных и другом коде Python я хочу передать его как этот тип, специфичный для предметной области.

При передаче экземпляра типа Customer ID непосредственно в качестве аргумента kwd .queryPyMongo жалуется, что не понимает тип.

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

Другие вопросы по тегам