8

我正在将 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_idevent_id

我也试过:

merchant_id = StringField(required = True)
order_id =  StringField(required = True)
event_type = StringField(
    required = True,
    unique_with = ('merchant_id', 'order_id'))
4

2 回答 2

7

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

meta = {
    'indexes': [
        {'fields': ('merchant_id', 'order_id'), 'unique': True}
    ]
}
于 2015-10-21T03:49:16.377 回答
3

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

于 2013-01-02T08:03:44.227 回答