如何在Python中使用Mongodb使一组字段唯一

10

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

14
你可以在类的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}
        ]
    }

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'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接