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 の親フィールドに i2 の重複エントリを作成します。mongoengineで外部キーのような関係をどのように表現しますか?

4

1 に答える 1

12

MongoEngineappendを使用してそれを更新に変換する代わりに、アトミック更新と $addToSet メソッドを使用できます - mongoDB の更新ドキュメントを参照してください。save

したがって、あなたの場合、次のことができます:

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がサポートされています。

于 2012-07-10T15:26:38.127 に答える