2013-06-28 107 views
0

以這個例子:Mongoengine查詢集只+ to_json/as_pymongo缺少ID

>>> class Doc(Document): 
... foo = StringField() 
... bar = StringField() 

如果我想要的 「欄」 字段:

>>> Doc(foo='foo', bar='bar').save() 
>>> Doc.objects.only('bar').to_json() 
'[{"bar": "bar"}]' 

如果我想要的 「ID」 字段和「酒吧「:

>>> Doc.objects.only('id', 'bar').to_json() 
'[{"bar": "bar"}]' 

這是故意還是錯誤?

順便說一句,我提到as_pymongo,因爲to_json使用它。

編輯:刪除了一個無用的問題。

回答

0

嘗試在'id'上使用'_id'。

背景:MongoDb調用它的內部「主鍵」「_id」來避免名稱空間衝突(例如,你可以有一個名爲「id」的字段作爲實例)並且表示它是一個mongodb內部...一些ORMS使用mongo_id直接訪問該「_id」項。但是,是的,這是爲了避免名稱空間問題與非常常見的字段名稱「ID」。在你的查詢語境中,你正在做一個字面的mongodb調用,所以它需要'_id',因爲它是真實的名字。

編輯..

+0

在MongoDB數據庫本身中,所有文檔的唯一ID都是「_id」字段。所以這不是MongoEngine的怪癖,它是對數據的忠實反映。 –

+0

沒錯,我在回答中有點喋喋不休。 Mongodb實際上稱這個字段爲'_id'。 –