Mongoengine unique_with

时间:2011-09-30 06:11:12

标签: python mongodb mongoengine

我在MongoDB中使用mongoengine。我必须创建一个文档,其中元组(merchant_id,order_id,event_type)必须是唯一的密钥。

到目前为止,我一直只处理两个领域的独特性问题。所以下面的工作 -

merchant_id = StringField(required = True)
order_id = StringField(required = True, unique_with = 'merchant_id')

现在,我正在尝试为三个领域执行此操作 -

merchant_id = StringField(required = True)
order_id =  StringField(required = True)
event_type = StringField(
    required = True,
    unique_with = ['merchant_id', 'order_id'])

但这不起作用。我没有在模块中收到错误。但如果我输入数据 -

merchant_id = 'Merchant1'
order_id = 'Order1'
event_type = 'Event1'

然后尝试使用相同的merchant_idorder_id添加另一个数据,但使用不同的event_id,然后会出现关于成为重复键的错误。

我也尝试过:

merchant_id = StringField(required = True)
order_id =  StringField(required = True)
event_type = StringField(
    required = True,
    unique_with = ('merchant_id', 'order_id'))

3 个答案:

答案 0 :(得分:7)

您可以在班级

的元字典中指定indexes
meta = {
    'indexes': [
        {'fields': ('merchant_id', 'order_id'), 'unique': True}
    ]
}

答案 1 :(得分:2)

如果要修改现有索引的参数,则必须先删除索引,然后重新创建它。当然,您无法在包含重复项的集合上创建唯一索引。您必须先删除重复项,或使用'dropDups'索引创建选项。

答案 2 :(得分:0)

确保创建索引,否则'unique': True索引和unique_with字段都不起作用。

meta = {
    'auto_create_index': True
}