我正在明ODM中设置映射。出现的一个问题是如何将自定义类型映射到字段,以及如何将该自定义类型传递到.query
基本上,我有一个代表客户ID的对象。我希望FieldProperty能够获取并返回这种类型的对象,而不是其中一种内置类型。该类型可以转换为int,也可以作为int存储在Mongo中,但是在数据模型和其他Python代码中我想将它作为特定于域的类型传递。
当直接将CustomerID类型的实例作为kwd参数传递给.query
时,PyMongo会抱怨它不理解该类型。
答案 0 :(得分:2)
我最近想做类似的事情;通过Ming在MongoDB中将IP地址存储为二进制数据。 (这样做的原因是为了允许有效的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