MongoEngineを使用して埋め込みドキュメントをドキュメントに追加すると、リストは空ですが最初に動作しますが、それ以降は失敗します:mongoengine.errors.OperationError:保存できませんでしたドキュメント(「sensorlist.1.alert_list.0._cls」と「sensorlist.1.alert_list」を同時に更新できません)MongoEngineは埋め込みドキュメントを2回目に保存しません
次のテストコードは、この問題を示しています。一度実行すると、新しいqoo2の埋め込みアラートを持つS2エンベデッドセンサーを持つfooのコレクション/ドキュメント。あなたが再びそれを実行する場合、それは爆発 - 任意のアイデア? Thxをビル
import mongoengine as ME
ME.connect('foo')
class Sensor(ME.EmbeddedDocument):
name = ME.StringField()
alert_list = ME.ListField()
class Alert(ME.EmbeddedDocument):
name = ME.StringField(default = 'new alert')
class SiteConfig(ME.Document):
siteid = ME.StringField()
sensorlist = ME.ListField(ME.EmbeddedDocumentField(Sensor))
if not SiteConfig.objects(siteid = '123456'):
newsite = SiteConfig(siteid = '123456')
newsite.save()
print("saved new site")
site = SiteConfig.objects(siteid = '123456').first()
newsensor = Sensor(name='S1')
site.sensorlist.append(newsensor)
site.save()
print("added sensor S1")
newsensor = Sensor(name='S2')
site.sensorlist.append(newsensor)
site.save()
print("added sensor S2")
for sensor in site.sensorlist:
if sensor.name =='S2':
alert = Alert()
sensor.alert_list.append(alert)
site.save()
print('added first alert to S2')
for sensor in site.sensorlist:
if sensor.name =='S2':
alert = Alert()
sensor.alert_list.append(alert)
site.save()
print('added second alert to S1')