"id" 无法访问 mongo 条目
Unable to access mongo entry by "id"
我有一个 Mongo 文档,其中包含一些字段(_id、id、名称、状态等...)。我在 class 中写了一个典型的文档(就像模型一样):
class mod(Document):
id=fields.IntField()
name = fields.StringField()
status=fields.StringField()
description_summary = fields.StringField()
_id = fields.ObjectIdField()
使用这个模型,我尝试访问它们:
>>> from mongoengine import *
>>> from api.models import *
>>> connect('doc')
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())
我试图获取 "mod" 文档中的所有条目:成功了!我可以获取所有条目的所有字段(id、名称等...)
>>> mod_ = mod.objects.all()
>>> mod_[0].name
'Name of entry'
>>> mod_[0].id
102
我尝试过滤 return 字段为 "status" = "Incomplete" 的所有条目:它有效,就像 before.I 尝试过滤其他字段一样:它也有效
>>> mod_ = mod.objects(status="Incomplete")
>>> mod_[0].name
'Name of entry'
>>> mod_[0].id
102
但是当我尝试使用 id 进行过滤时,我无法获得结果:
>>> mod_ = mod.objects(id=102)
>>> mod_[0].name
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/.../lib/python3.4/site-packages/mongoengine/queryset/base.py", line 193, in __getitem__
return queryset._document._from_son(queryset._cursor[key],
File "/.../lib/python3.4/site-packages/pymongo/cursor.py", line 570, in __getitem__
raise IndexError("no such item for Cursor instance")
IndexError: no such item for Cursor instance
>>> mod_[0].id
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/.../lib/python3.4/site-packages/mongoengine/queryset/base.py", line 193, in __getitem__
return queryset._document._from_son(queryset._cursor[key],
File "/.../lib/python3.4/site-packages/pymongo/cursor.py", line 570, in __getitem__
raise IndexError("no such item for Cursor instance")
IndexError: no such item for Cursor instance
所以我尝试 mod.objects.get(id=102)
>>> mod_ = mod.objects.get(id=102)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/.../lib/python3.4/site-packages/mongoengine/queryset/base.py", line 271, in get
raise queryset._document.DoesNotExist(msg)
api.models.DoesNotExist: mod matching query does not exist.
Mod 匹配的查询不存在,所以它不识别 id 字段但是当我写 mod_[0].id
我确实有一个结果,所以有什么问题吗?
编辑:我相信在编写 mod.objects(id=102) 时,字段 id 被解释为 _id。 如何指定,我想通过id查询而不是_id?我的文档已经写好了, 所以我不能更改字段的名称。
所以,问题不在于_id 和id 之间的差异,如@HourGlass 所说。 id 字段的值存储为整数,我为 id 字段编写了 fields.IntField(),并调用了 mod.objects(id=102)
(不带引号)。
但由于某些原因,我不得不将它们写成fields.StringField(),并调用mod.objects(id='102')
.
我有一个 Mongo 文档,其中包含一些字段(_id、id、名称、状态等...)。我在 class 中写了一个典型的文档(就像模型一样):
class mod(Document):
id=fields.IntField()
name = fields.StringField()
status=fields.StringField()
description_summary = fields.StringField()
_id = fields.ObjectIdField()
使用这个模型,我尝试访问它们:
>>> from mongoengine import *
>>> from api.models import *
>>> connect('doc')
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())
我试图获取 "mod" 文档中的所有条目:成功了!我可以获取所有条目的所有字段(id、名称等...)
>>> mod_ = mod.objects.all()
>>> mod_[0].name
'Name of entry'
>>> mod_[0].id
102
我尝试过滤 return 字段为 "status" = "Incomplete" 的所有条目:它有效,就像 before.I 尝试过滤其他字段一样:它也有效
>>> mod_ = mod.objects(status="Incomplete")
>>> mod_[0].name
'Name of entry'
>>> mod_[0].id
102
但是当我尝试使用 id 进行过滤时,我无法获得结果:
>>> mod_ = mod.objects(id=102)
>>> mod_[0].name
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/.../lib/python3.4/site-packages/mongoengine/queryset/base.py", line 193, in __getitem__
return queryset._document._from_son(queryset._cursor[key],
File "/.../lib/python3.4/site-packages/pymongo/cursor.py", line 570, in __getitem__
raise IndexError("no such item for Cursor instance")
IndexError: no such item for Cursor instance
>>> mod_[0].id
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/.../lib/python3.4/site-packages/mongoengine/queryset/base.py", line 193, in __getitem__
return queryset._document._from_son(queryset._cursor[key],
File "/.../lib/python3.4/site-packages/pymongo/cursor.py", line 570, in __getitem__
raise IndexError("no such item for Cursor instance")
IndexError: no such item for Cursor instance
所以我尝试 mod.objects.get(id=102)
>>> mod_ = mod.objects.get(id=102)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/.../lib/python3.4/site-packages/mongoengine/queryset/base.py", line 271, in get
raise queryset._document.DoesNotExist(msg)
api.models.DoesNotExist: mod matching query does not exist.
Mod 匹配的查询不存在,所以它不识别 id 字段但是当我写 mod_[0].id
我确实有一个结果,所以有什么问题吗?
编辑:我相信在编写 mod.objects(id=102) 时,字段 id 被解释为 _id。 如何指定,我想通过id查询而不是_id?我的文档已经写好了, 所以我不能更改字段的名称。
所以,问题不在于_id 和id 之间的差异,如@HourGlass 所说。 id 字段的值存储为整数,我为 id 字段编写了 fields.IntField(),并调用了 mod.objects(id=102)
(不带引号)。
但由于某些原因,我不得不将它们写成fields.StringField(),并调用mod.objects(id='102')
.