11

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

4

1 回答 1

12

您可以使用原子更新和 $addToSet 方法,而不是使用append然后使用并让 MongoEngine 将其转换为更新 - 请参阅更新 mongoDB 文档save

所以在你的情况下,你可以这样做:

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

于 2012-07-10T15:26:38.127 回答