2013-02-21 11 views
5

Chcę utworzyć tabelę, w której dwa jej pola łączą się, tworząc pole indeksu. Mój kod Pythona do tworzenia tabeli jest następujący. Chcę, aby połączone pola były unikatowe, tak aby nie można było utworzyć dwóch grup o tym samym kodzie course_name i group_name. Czy ktoś mógłby mi z tym pomóc?Jak utworzyć zestaw złożonych pól unikalnych w Mongodb w Pythonie

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") 

Odpowiedz

7

Można określić indexes w meta dict klasy:

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

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

Można również określić wielofunkcyjnego boiska wyjątkowość ograniczeń za pomocą unique_with, który może być pojedynczą nazwą pola lub listą lub krotką nazw pól

W twoim przypadku:

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

Albo bardziej skomplikowany:

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']) 
Powiązane problemy