mongoengine:test1不是有效的ObjectId

2024-09-27 00:19:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我收到以下错误消息:

$ python tmp2.py
why??
Traceback (most recent call last):
  File "tmp2.py", line 15, in <module>
test._id = ObjectId(i[0])
  File "/home/mictadlo/.virtualenvs/unisnp/lib/python2.7/site-packages/bson/objectid.py", line 92, in __init__
self.__validate(oid)
  File "/home/mictadlo/.virtualenvs/unisnp/lib/python2.7/site-packages/bson/objectid.py", line 199, in __validate
raise InvalidId("%s is not a valid ObjectId" % oid)
bson.errors.InvalidId: test1 is not a valid ObjectId

使用此代码:

^{pr2}$

怎么可能使用自己的ID也是唯一的?在


Tags: inpyhomelibpackageslinesitevirtualenvs
2条回答

根据文档:http://docs.mongoengine.org/apireference.html#fields,objectfield是“MongoDB objectid的字段包装器”。因此它不能接受字符串test1作为对象id

您可能需要将代码更改为如下所示:

 for i in [(bson.objectid.ObjectId('test1'), "a"), (bson.objectid.ObjectId('test2'), "b"), (bson.objectid.ObjectId('test3'), "c")]:

使您的代码正常工作(假设test1等是有效的id)

两件事:

ObjectId接收24个十六进制字符串,不能用该字符串初始化它。例如,不使用'test1',您可以使用一个字符串,例如'53f6b9bac96be76a920e0799'或{}。您甚至不需要初始化ObjectId,可以这样做:

...
test._id = '53f6b9bac96be76a920e0799'
test.save()
...

我不知道你想用_id来完成什么。如果您试图为您的文档生成和id字段或“主键”,则不必这样做,因为它是自动生成的。你的代码应该是:

^{pr2}$

如果您坚持使用名为_id的字段,您必须知道您的id将是相同的,因为在内部,MongoDB调用它_id。如果仍要使用string1作为标识符,则应执行以下操作:

class Test(Document):
    _id = StringField(primary_key=True)
    tag = StringField(required=True)

相关问题 更多 >

    热门问题