2016-09-27 37 views
0

我想在將文檔嵌入到其他文檔之前將其他屬性添加到文檔中,但我不知道該怎麼做。如何在不更改原始模型的情況下向嵌入式文檔添加其他字段

這裏是我的代碼和我所到目前爲止已經試過:

from mongoengine import * 
from datetime import datetime 


class User(Document): 
    name = StringField(max_length=80, required=True) 
    created_at = DateTimeField(default=datetime.now(), required=True) 
    updated_at = DateTimeField(default=datetime.now(), required=True) 

    meta = { 
     'collection': 'users' 
    } 

    def save(self, *args, **kwargs): 
     self.updated_at = datetime.now() 
     return super(User, self).save(*args, **kwargs) 



class Stream(Document): 
    users = EmbeddedDocumentListField(document_type='User') 
    created_at = DateTimeField(default=datetime.now(), required=True) 
    updated_at = DateTimeField(default=datetime.now(), required=True) 

    meta = { 
     'collection': 'streams' 
    } 

    def save(self, *args, **kwargs): 
     self.updated_at = datetime.now() 
     return super(Stream, self).save(*args, **kwargs) 

當我嵌入user document流中的用戶EmbeddedDocumentListField,它將被添加和看起來像這樣

{ 
    "_id" : ObjectId("57e6123fe8c39b18b1a13431"), 
    "users" : [ 
     { 
      "_id" : ObjectId("57e6123fe8c39b18b1a13432"), 
      "name": "Rohit Khatri", 
      "created_at" : ISODate("2016-09-24T11:12:23.182Z"), 
      "updated_at" : ISODate("2016-09-24T11:12:23.301Z") 
     } 
    ], 
    "created_at" : ISODate("2016-09-24T11:12:23.189Z"), 
    "updated_at" : ISODate("2016-09-24T11:12:23.323Z") 
} 

現在我想要將User文檔嵌入到其他屬性中,例如角色。這是我曾嘗試: -

user = User.objects.create(name='Rohit Khatri') 
user.roles = ['admin','writer'] 

stream = Stream.objects.create() 
stream.users.append(user) 
stream.save() 

但它不會添加的角色領域,這將是感激,如果有人可以幫助我。

感謝

回答

1

使用更新方法來設置新的屬性

user.update(set__roles = ['admin','writer']) 
+0

它將改變用戶的文檔,我不想使原來的文檔中的任何改變,但在嵌入式用戶文件。 –

+0

@RohitKhatri不,只需找到想要更改的用戶,然後運行更新即可。 – armak

+0

它引發錯誤'mongoengine.errors.InvalidQueryError:無法解析字段「角色」 –

相關問題