2016-09-27 4 views
0

ドキュメントに追加のプロパティを追加してから別のドキュメントに埋め込むことはできますが、その方法はわかりません。元のモデルを変更せずに埋め込みドキュメントにフィールドを追加する方法

は、ここに私のコードだと何が私がこれまで試してみました:私は、ストリームのユーザーEmbeddedDocumentListFieldからuser documentを埋め込むと

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) 

は、それが追加され、今、この

{ 
    "_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") 
} 

のようになりますIロールのような追加のプロパティを持つユーザー文書を埋め込みたい

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:フィールド" roles "を解決できません –

関連する問題