Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “无法通过访问mongo条目”;id";_Python_Mongodb_Mongoengine_Restframeworkmongoengine - Fatal编程技术网

Python “无法通过访问mongo条目”;id";

Python “无法通过访问mongo条目”;id";,python,mongodb,mongoengine,restframeworkmongoengine,Python,Mongodb,Mongoengine,Restframeworkmongoengine,我有一个Mongo文档,其中包含一些字段(_id、id、名称、状态等)。我在课堂上写了一个典型的文档(就像模型一样): 使用这个模型,我尝试访问它们: >>> from mongoengine import * >>> from api.models import * >>> connect('doc') MongoClient(host=['localhost:27017'], document_class=

我有一个Mongo文档,其中包含一些字段(_id、id、名称、状态等)。我在课堂上写了一个典型的文档(就像模型一样):

使用这个模型,我尝试访问它们:

    >>> 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、名称等)

我试着过滤并返回“status”=“complete”字段的所有条目:它可以工作,就像以前一样。我试着过滤其他字段:它也可以工作

    >>> 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 matching查询不存在,因此它无法识别id字段,但当我写入
Mod_u0]。id
时,我确实有一个结果,所以可能有什么问题?


编辑:我认为在编写mod.objects(id=102)时,字段id被解释为_id。我如何指定,我想按id而不是_id进行查询?我的文档已经被写入,因此我无法更改字段的名称。

因此,问题不在于_id和id之间的差异,如前所述。id字段的值存储为整数,我为id字段编写了fields.IntField(),并调用
mod.objects(id=102)
(不带引号)


但由于某些原因,我不得不将它们写成fields.StringField(),并调用
mod.objects(id='102')
,因此,问题并不是像前面所说的那样来自于id和id之间的差异。id字段的值存储为整数,我为id字段编写了fields.IntField(),并调用
mod.objects(id=102)
(不带引号)


但由于某种原因,我必须把它们写成字段.StristField()和调用<代码> mod .Objts(ID= '102')< /C> > /P>实际上,Mango可以区分id和yid,所以它不会把你的ID字段看作默认的id id字段。使用id字段进行查询应该可以工作,我认为没有名为id=102的文档。在我的两个示例(objects.all()和objects(status=“”)中,如果我编写mod[0]。id,我确实有一个“102”-我在mongoshell db.collectionname.find()中使用id字段尝试了相同的场景。它确实为我提供了正确的文档,我也设法在mongoshell中获得一个合适的文档,但我的问题是在mongoengine模块pythonSo中,我找到了关于db_字段参数,

mod_id=fields.IntField(db_field='id')
。我仍然有同样的问题,所以我不知道什么是问题。事实上,Mango可以区分id和yid,所以它不会把你的ID字段看作默认的id id字段。使用id字段进行查询应该可以工作,我认为没有名为id=102的文档。在我的两个示例(objects.all()和objects(status=“”)中,如果我编写mod[0]。id,我确实有一个“102”-我在mongoshell db.collectionname.find()中使用id字段尝试了相同的场景。它确实为我提供了正确的文档,我也设法在mongoshell中获得一个合适的文档,但我的问题是在mongoengine模块pythonSo中,我找到了关于db_字段参数,
mod_id=fields.IntField(db_field='id')
。我仍然有同样的问题,所以我看不出有什么问题。
    >>> mod_ = mod.objects(status="Incomplete")
    >>> mod_[0].name
    'Name of entry'
    >>> mod_[0].id
    102
    >>> 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_ = 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.