2013-04-16 59 views
0

我注意到我的應用程序中發生了一件奇怪的事情。我只是無法弄清楚我正在做什麼系統性錯誤,這使得我的id字段被命名爲None。 我使用mongoengine和我所定義的文件,例如:Mongoengine - id字段被命名爲無

class TestDoc(Document): 
    myField = StringField() 
    secondField = StringField() 

然後,當我實例類型TestDoc的Python對象,這是會發生什麼:

doc = models.TestDoc(myField="My field") 
doc.save() 

print doc.id 
print "TESTING DOC: ", doc.__dict__ 

的結果是這樣的:

>> 516d4e3cd836195263fdd45b 
>> TESTING DOC: {'_created': False, '_data': {None: ObjectId('516d4e3cd836195263fdd45b'), 'secondField': None, 'myField': 'My field'}, '_changed_fields': [], '_initialised': True} 

我不明白爲什麼而不是名爲「id」的字段,我最終有一個奇怪的字段叫做None,其值爲實際的id。在數據庫中,一切似乎都沒有問題,文檔看起來沒問題,但只要我檢索一個文檔並希望處理該文檔或將其轉換爲json以便通過網絡發送,這會使我遇到問題。誰能幫忙?

回答

1

_data字典是一個內部的mongoengine字典,這些值可能與存儲在數據庫中的值不同。

爲什麼None而不是_id?我不是100%確定的,在時間的迷霧中迷失了 - 但它在#255中修復,並且在下一個版本中將修復爲_id

+0

有趣......謝謝!我知道_dict是一個內部的mongoengine,但即使我嘗試使用vars()來獲取這個文檔的屬性,結果仍然是一樣的。即使我手動嘗試指定:doc.id = ObjectId(),結果仍然是一個名爲None的字段。因此,如果我需要在不同的函數中使用該對象或將python(mongoengine)doc序列化爲json,是否有任何方法可以擺脫None,除了手動強制名爲** actual_id **或smth(導致如果我強制一個名爲id的字段,什麼都不會發生)? – Clara

+0

在0.8中將會有一個包裝器來處理json轉換包裝'bson.json_util'和使用'doc.to_mongo()' – Ross

+0

非常感謝,Ross! – Clara

相關問題