2015-10-28 91 views

回答

1

基本上你可以用下面的代碼

from mongoengine import * 
from bson.objectid import ObjectId 


class MyEmbeddedDocument(EmbeddedDocument): 
    oid = ObjectIdField(required=True, default=ObjectId, 
        unique=True, primary_key=True) 
    ... 

class MyDocument(Document): 
    embedded_list = EmbeddedDocumentListField(MyEmbeddedDocument) 
    ... 

讓更多地解釋這樣做,

根據documentation您可以添加ObjectIdField到您的模型但是它不是必需的,並primary_key那麼你應該設置該屬性爲真。此外,它不會爲它的每個生成ObjectId,然後導入並將其默認爲ObjectId。

最後一步有點棘手。如果需要解釋,

bson.objectid.ObjectId是生成新的objectids的類。

此外documentation說默認值可以調用,而不是解釋清楚它是如何工作的。

還打着_id爲embeddeddocument是不是最好的命名慣例怎麼一回事,因爲你寫的查詢與雙排下劃線和「_id」名embeddeddocument多了一個下劃線作爲下面的代碼

MyDocument.objects.get(notice___id) 

然後mongoengine拋出異常怎麼一回事,因爲的'_id'名字還有一個下劃線。因此,您應該直接將名稱作爲'oid'命名爲objectId或renname'id'的簡短版本或您想要的名稱。

相關問題