2011-02-17 72 views
2

是否有可能在使用mongodb引擎保存到mongodb的django模型中创建自定义ObjectId?我试图做到这一点,传递我想要的ObjectId类型的字符串,例如Flight(_id = ObjectId(myid)),但这会给我一个错误,说明该字符串不是一个有效的ID。是否有可能用自定义ID覆盖ID?还有什么地方可以阅读这些信息或创建ID的规则?Mongodb引擎和Django创建自定义ObjectId

例如:

File "/usr/local/lib/python2.7/dist-packages/bson/objectid.py", line 172, in __validate raise InvalidId("%s is not a valid ObjectId" % oid) InvalidId: short_profile_4fcad5e8e5095f5a4f000000 is not a valid ObjectId

+0

什么是确切的错误吗? – 2011-02-17 12:12:45

回答

0

为了确保您可以自定义对象ID,检查对象ID documentation对于这一点,但我不unsdestand FOT你需要什么。

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

从文档

Although _id values can be of any type, a special BSON datatype is provided for object ids. This type is a 12-byte binary value designed to have a reasonably high probability of being unique when allocated. All of the officially-supported MongoDB drivers use this type by default for _id values. Also, the Mongo database itself uses this type when assigning _id values on inserts where no _id value is present.

+1

所以我真正想要的是设置一个字符串作为我的_id,但我不断收到此错误:AutoField(默认主键)值必须是代表MongoDB上的ObjectId的字符串(代替u'ryanair-DU ...)任何想法可能是错误的?我的模型有_id = models.CharField(db_index = True) – gomesr 2011-02-17 18:57:08