如何在Python中使MongoDB字段组合唯一
我想创建一个表格,其中有两个字段组合在一起形成一个索引字段。我的Python代码如下。我想要做的是让组合的字段 course_name
和 group_name
变得唯一,这样就不能创建两个相同的 course_name
和 group_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 个回答
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'])
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}
]
}