ListField在Python mongoengine中没有重复项

问题描述 投票:9回答:1

我必须错过一些非常明显的东西。但是我似乎找不到使用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的父字段中为i2创建一个重复项。您如何在mongoengine中表达诸如关系之类的外键?

python mongodb unique mongoengine
1个回答
11
投票

代替使用append然后使用save并让MongoEngine将其转换为更新,您可以使用原子更新和$ addToSet方法-参见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

© www.soinside.com 2019 - 2024. All rights reserved.