Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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 仅限Mongoengine查询集+;to_json/as_pymongo缺少id_Python_Mongodb_Mongoengine - Fatal编程技术网

Python 仅限Mongoengine查询集+;to_json/as_pymongo缺少id

Python 仅限Mongoengine查询集+;to_json/as_pymongo缺少id,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,举个例子: >>> class Doc(Document): ... foo = StringField() ... bar = StringField() 如果我想要“栏”字段: 如果我想要“id”字段和“bar”: 这是故意的还是错误 顺便说一句,我提到了作为_pymongo,因为to_json使用它 编辑:删除了一个无用的问题。尝试在“id”上使用“\u id” 背景:MongoDb调用它的内部“主键”“\u id”以避免名称空间冲突(例如,您可以有一个名为

举个例子:

>>> class Doc(Document):
...    foo = StringField()
...    bar = StringField()
如果我想要“栏”字段:

如果我想要“id”字段和“bar”:

这是故意的还是错误

顺便说一句,我提到了
作为_pymongo
,因为to_json使用它


编辑:删除了一个无用的问题。

尝试在“id”上使用“\u id”

背景:MongoDb调用它的内部“主键”“\u id”以避免名称空间冲突(例如,您可以有一个名为“id”的字段)并表示它是MongoDb内部。。。一些orm使用mongo_id直接访问该“_id”项。但是,是的,这是为了避免非常常见的字段名“id”的名称空间问题。在查询的上下文中,您正在执行一个文本mongodb调用,因此它需要是“\u id”,因为这是它的真实名称


编辑..

在MongoDB数据库本身中,所有文档的唯一id都是“\u id”字段。所以这不是MongoEngine的怪癖,而是数据的真实反映。没错,我在回答时有些含糊不清。Mongodb实际上调用该字段“\u id”。
>>> Doc(foo='foo', bar='bar').save()
>>> Doc.objects.only('bar').to_json()
'[{"bar": "bar"}]'
>>> Doc.objects.only('id', 'bar').to_json()
'[{"bar": "bar"}]'