我正在尝试使用unique_with param对多个属性强制执行唯一约束。
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应用程序正在使用相同的副本集,它可以创建复合索引。所以我不认为副本集配置存在问题。