【问题标题】:Mongodb-engine and Django create custom ObjectIdMongodb-engine 和 Django 创建自定义 ObjectId
【发布时间】:2011-02-17 12:02:48
【问题描述】:

是否可以在使用 mongodb-engine 保存到 mongodb 的 django 模型中创建自定义 ObjectId?我试图将我想要的字符串传递给 ObjectId 类型,例如 Flight(_id=ObjectId(myid)) ,但这给了我一个错误,说字符串不是有效的 id。是否可以用自定义的 id 覆盖?有没有什么地方可以让我了解这个或创建 ID 的规则是什么?

示例:

文件“/usr/local/lib/python2.7/dist-packages/bson/objectid.py”,第 172 行,在 __validate 中 raise InvalidId("%s 不是一个有效的 ObjectId" % oid) InvalidId:short_profile_4fcad5e8e5095f5a4f000000 不是有效的 ObjectId

【问题讨论】:

  • 请问具体的错误是什么?

标签: python django mongodb


【解决方案1】:

为了确保您可以自定义 objectId,请检查 objectId documentation ,但我不明白您需要什么。

您可以使用任何您想要的类型来代替 ObjectId。因此,您可以制作 _id 字符串并插入任何字符串值而不是 mongo ObjectId。但是对于集合的每个成员,您的自定义 _id 必须是唯一的。如果集合在 _id 上有索引,则强制执行此操作,默认情况下就是这种情况。

来自文档

虽然 _id 值可以是任何 类型,一个特殊的 BSON 数据类型是 为对象 ID 提供。这种类型是 一个 12 字节的二进制值,旨在 有相当高的概率 分配时是唯一的。所有的 官方支持的 MongoDB 驱动程序默认使用这种类型 _id 值。此外,Mongo 数据库本身在分配时使用这种类型 _id 值在不存在 _id 值的插入上。

【讨论】:

  • 所以我真正想要的是设置一个字符串作为我的 _id 但我不断收到此错误:AutoField (default primary key) values must be strings代表 MongoDB 上的 ObjectId (got u'ryanair-DU ...' 相反)有什么想法可能是错的吗?我的模型有 _id = models.CharField(db_index=True)
猜你喜欢
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 2011-08-10
  • 2019-07-11
  • 2011-07-04
  • 2017-06-17
  • 1970-01-01
相关资源
最近更新 更多