Python Mongoengine独特的
我正在使用mongoengine和MongoDB。我必须制作一个文档,其中元组(商家id、订单id、事件类型)必须是唯一的密钥 到目前为止,我一直在讨论唯一性仅限于两个领域。所以下面的工作-Python Mongoengine独特的,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,我正在使用mongoengine和MongoDB。我必须制作一个文档,其中元组(商家id、订单id、事件类型)必须是唯一的密钥 到目前为止,我一直在讨论唯一性仅限于两个领域。所以下面的工作- merchant_id = StringField(required = True) order_id = StringField(required = True, unique_with = 'merchant_id') 现在,我试着为三个领域做这件事- merchant_id = StringFiel
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'
然后尝试添加另一个数据,该数据具有相同的商户id
和订单id
,但具有不同的事件id
,然后它会给出一个关于重复密钥的错误
我也尝试过:
merchant_id = StringField(required = True)
order_id = StringField(required = True)
event_type = StringField(
required = True,
unique_with = ('merchant_id', 'order_id'))
如果要修改现有索引的参数,必须先删除该索引,然后重新创建它。当然,不能在包含重复项的集合上创建唯一索引。您必须首先删除重复项,或者使用“dropDups”索引创建选项。您可以在类的元目录中指定
meta = {
'indexes': [
{'fields': ('merchant_id', 'order_id'), 'unique': True}
]
}
我知道问题出在哪里了。似乎一旦收集完成,就无法更改唯一密钥。所以之前唯一性是在两个字段上,后来我把它改为三个字段。所以它采用了定义的第一个键。要使定义的最新键生效,必须使用drop_collection()完全删除集合。然后它就起作用了。