【问题标题】:How to map a custom type in Ming ODM?如何在 Ming ODM 中映射自定义类型?
【发布时间】:2012-10-09 04:35:20
【问题描述】:

我正在 Ming ODM 中设置映射。出现的一个问题是如何将自定义类型映射到字段,以及如何将该自定义类型传递给.query

基本上,我有一个代表客户 ID 的对象。我希望 FieldProperty 获取并返回这种类型的对象,而不是内置类型之一。该类型可以与 int 相互转换,并且它将在 Mongo 中存储为 int,但在数据模型和其他 Python 代码中,我想将它作为这种特定于域的类型传递。

当直接将 CustomerID 类型的实例作为 kwd 参数传递给 .query 时,PyMongo 抱怨它不理解该类型。

【问题讨论】:

    标签: python mongodb pymongo ming


    【解决方案1】:

    我最近想做类似的事情;通过 Ming 将 IP 地址作为二进制数据存储在 MongoDB 中。 (这样做的原因是允许有效的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-05
      • 2019-01-25
      • 2011-10-15
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      • 2012-12-23
      • 2011-01-24
      相关资源
      最近更新 更多