如何在Python中创建Mongodb中唯一的字段组合

时间:2013-02-21 08:42:50

标签: python mongodb mongoengine

我想创建一个表,其中两个字段组合在一起形成一个索引字段。我创建表的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")

2 个答案:

答案 0 :(得分:9)

您可以在班级的meta字典中指定indexes

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}
        ]
    }

答案 1 :(得分:1)

来自: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'])