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"}]'