Mongoengine 唯一性约束

8 投票
2 回答
7431 浏览
提问于 2025-04-17 03:24

我正在使用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_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'))

2 个回答

9

你可以在类的元数据字典中指定 索引

meta = {
    'indexes': [
        {'fields': ('merchant_id', 'order_id'), 'unique': True}
    ]
}
3

如果你想修改一个已经存在的索引的参数,首先得把这个索引删除掉,然后再重新创建一个新的索引。当然,如果你的数据里有重复的内容,就不能创建唯一索引。你要么先把重复的数据去掉,要么使用“dropDups”这个选项来创建索引。

撰写回答