无法通过" id"

时间:2017-02-06 13:15:45

标签: python mongodb mongoengine restframeworkmongoengine

我有一个带有一些字段的Mongo文档(_id,id,name,status等等)。我在一个类中写了一个典型的文档(就像模型一样):

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,name等)

    >>> mod_ = mod.objects.all()
    >>> mod_[0].name
    'Name of entry'
    >>> mod_[0].id
    102

我尝试过滤并返回包含字段" status"的所有条目。 ="不完整":它像以前一样工作。我试图过滤其他字段:它也有效

    >>> 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 我的文档已经写好了,所以我无法更改名称字段。

1 个答案:

答案 0 :(得分:0)

所以,问题不是来自_id和id之间的区别,就像所说的@HourGlass一样。 id字段的值存储为整数,我为id字段编写fields.IntField(),并调用mod.objects(id=102)(不带引号)。

但出于某种原因,我必须将它们写成fields.StringField(),然后调用mod.objects(id='102')