Mongoengine 唯一性约束
我正在使用mongoengine和MongoDB。我需要创建一个文档,其中的元组(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_id
和order_id
但不同event_id
的数据时,就会出现关于重复键的错误。
我也尝试过:
merchant_id = StringField(required = True)
order_id = StringField(required = True)
event_type = StringField(
required = True,
unique_with = ('merchant_id', 'order_id'))
2 个回答
9
你可以在类的元数据字典中指定 索引。
meta = {
'indexes': [
{'fields': ('merchant_id', 'order_id'), 'unique': True}
]
}
3
如果你想修改一个已经存在的索引的参数,首先得把这个索引删除掉,然后再重新创建一个新的索引。当然,如果你的数据里有重复的内容,就不能创建唯一索引。你要么先把重复的数据去掉,要么使用“dropDups”这个选项来创建索引。