2012-07-10 33 views
9

我必须错过一些非常明显的东西。但我似乎无法找到一种使用mongoengine来表示集合的方法。ListField在Python中没有重复项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中表达关系这样的外键?

回答

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

相关问题