Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Mongoengine独特的_Python_Mongodb_Mongoengine - Fatal编程技术网

Python Mongoengine独特的

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

我正在使用mongoengine和MongoDB。我必须制作一个文档,其中元组(商家id、订单id、事件类型)必须是唯一的密钥

到目前为止,我一直在讨论唯一性仅限于两个领域。所以下面的工作-

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()完全删除集合。然后它就起作用了。