我一定想念一些确实很明显的东西。但是我似乎找不到使用mongoengine表示集合的方法。
class Item(Document):
name = StringField(required=True)
description = StringField(max_length=50)
parents = ListField(ReferenceField('self'))
i = Item.objects.get_or_create(name='test item')[0]
i2 = Item(name='parents1')
i2.save()
i3 = Item(name='parents3')
i3.save()
i.parents.append(i2)
i.parents.append(i2)
i.parents.append(i3)
i.save()
上面的代码将在i1的parent字段中为i2创建一个重复项。您如何在mongoengine中表达诸如关系之类的外键?
最佳答案
您可以使用原子更新和$ addToSet方法,而不是使用append
然后使用save
并让MongoEngine将其转换为更新,请参见the updating mongoDB docs
因此,在您的情况下,您可以执行以下操作:
i.update(add_to_set__parents=i2)
i.update(add_to_set__parents=i3)
i.update(add_to_set__parents=i2)
目前不支持
addToSet
和each
-请参阅:https://github.com/MongoEngine/mongoengine/issues/33更新:
支持add_to_set。
关于python - Python Mongoengine中没有重复项的ListField,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11406380/