我正在尝试使用 unique_with 参数对多个属性强制执行唯一约束。
ContentType = ('category', 'product')
PageType = ('category', 'product', 'compare', 'review')
class Content(db.Document):
content_type = db.StringField(required=True, choices=ContentType)
content_id = db.StringField(required=True)
page_type = db.StringField(required=True, choices=PageType, unique_with=['content_type', 'content_id'])
title = db.StringField()
description = db.StringField()
keywords = db.ListField(db.StringField())
footer = db.StringField()
def save(self, *args, **kwargs):
super(Content, self).save(*args, **kwargs)
这会在我的本地开发机器上创建索引。但除了 _id 上的默认唯一索引外,无法在生产环境中创建索引。
在开发环境中,我使用单个 mongo 实例,而在生产环境中,我使用 3 个实例的副本集(1 个主实例、1 个从属实例和 1 个仲裁器)。
我还尝试通过以下代码手动创建索引:
PageType = ('category', 'product', 'compare', 'review')
ContentType = ('category', 'product')
class Content(db.Document):
content_type = db.StringField(required=True, choices=ContentType)
content_id = db.StringField(required=True)
page_type = db.StringField(required=True, choices=PageType)
title = db.StringField()
description = db.StringField()
keywords = db.ListField(db.StringField())
footer = db.StringField()
meta = {
'indexes': [
'content_type',
'content_id',
'page_type',
{
'fields': ['content_type', 'content_id', 'page_type'],
'unique': True
}
]
}
def save(self, *args, **kwargs):
super(Content, self).save(*args, **kwargs)
我不确定我在这里做错了什么,或者我的代码中有错误。任何帮助都会很棒。
还有一条信息:django 应用程序正在使用相同的副本集,它能够创建复合索引。所以我认为副本集配置没有问题。