9

我想创建一个表,其中两个字段组合形成一个索引字段。我用于创建表的 Python 代码如下。我想要做的是使组合字段course_namegroup_name唯一的,以便没有两个组具有相同的course_namegroup_name可以创建。有人可以帮我吗?

class SocialGroup(Document):
    timestamp = DateTimeField(default=datetime.now)
    course_name = StringField()
    group_name = StringField(choices=[('A', 1), ('B', 1), ('C', 1),('D', 1), ('E', 1), ('F', 1), ('None',1)], default="None")
4

2 回答 2

14

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

class SocialGroup(Document):
    timestamp = DateTimeField(default=datetime.now)
    course_name = StringField()
    group_name = StringField(choices=[('A', 1), ('B', 1), ('C', 1),('D', 1), ('E', 1), ('F', 1), ('None',1)], default="None")
    meta = {
        'indexes': [
            {'fields': ('course_name', 'group_name'), 'unique': True}
        ]
    }
于 2013-02-21T13:26:32.623 回答
4

来自:http ://docs.mongoengine.org/guide/defining-documents.html#uniqueness-constraints

您还可以使用 指定多字段唯一性约束 unique_with,它可以是单个字段名称,也可以是字段名称的列表或元组

在你的情况下:

class SocialGroup(Document):
    timestamp = DateTimeField(default=datetime.now)
    course_name = StringField()
    group_name = StringField(choices=[('A', 1), ('B', 1), ('C', 1),('D', 1), ('E', 1), ('F', 1), ('None',1)], default="None",
                             unique_with='course_name')

或者更复杂:

group_name = StringField(choices=[('A', 1), ('B', 1), ('C', 1),('D', 1), ('E', 1), ('F', 1), ('None',1)], default="None",
                         unique_with=['course_name', 'another_field', 'more_field'])
于 2017-01-27T10:58:04.617 回答