【发布时间】:2016-04-15 21:36:25
【问题描述】:
当我使用 MongoEngine 将嵌入式文档添加到文档时,它在列表为空时第一次工作,但随后尝试失败并显示:mongoengine.errors.OperationError:无法保存文档(无法更新 'sensorlist.1 .alert_list.0._cls' 和 'sensorlist.1.alert_list')
以下测试代码演示了该问题:如果您运行一次,您将在 foo 中看到一个新集合/文档,该集合/文档具有 S2 嵌入式传感器和 qty 2 个嵌入式警报。如果你再次运行它,它会爆炸 - 有什么想法吗? 谢谢比尔
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')
【问题讨论】:
标签: mongodb mongoengine