我一定想念一些确实很明显的东西。但是我似乎找不到使用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)

目前不支持addToSeteach-请参阅:https://github.com/MongoEngine/mongoengine/issues/33

更新:

支持add_to_set

关于python - Python Mongoengine中没有重复项的ListField,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11406380/

10-12 16:26