Mongoengine unique_with

Sid*_*rth 6 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')
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试为三个领域做到这一点 -

merchant_id = StringField(required = True)
order_id =  StringField(required = True)
event_type = StringField(
    required = True,
    unique_with = ['merchant_id', 'order_id'])
Run Code Online (Sandbox Code Playgroud)

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

merchant_id = 'Merchant1'
order_id = 'Order1'
event_type = 'Event1'
Run Code Online (Sandbox Code Playgroud)

然后尝试用相同的添加另一个数据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'))
Run Code Online (Sandbox Code Playgroud)

小智 7

您可以在类的元字典中指定索引

meta = {
    'indexes': [
        {'fields': ('merchant_id', 'order_id'), 'unique': True}
    ]
}
Run Code Online (Sandbox Code Playgroud)


cof*_*ine 3

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