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()
しかし、それは役割のフィールドを追加しません誰かがこれで私を助けることができるならば、それは感謝するでしょう - :ここでは、私がしようとしているものです。
おかげ
それはユーザーのドキュメントを変更します、と私は、元の文書の変更を加える必要はありませんが、埋め込まれたユーザーに資料。 –
@RohitKhatriいいえ、変更するユーザーを見つけて更新プログラムを実行してください。 – armak
エラー 'mongoengine.errors.InvalidQueryError:フィールド" roles "を解決できません –