2013-02-21 6 views
5

Ich möchte eine Tabelle erstellen, wo zwei seiner Felder kombinieren, um ein Indexfeld zu bilden. Mein Python-Code zum Erstellen der Tabelle lautet wie folgt. Was ich tun möchte, ist, die kombinierten Felder course_name und group_name einzigartig zu machen, so dass keine zwei Gruppen mit den gleichen course_name und group_name erstellt werden können. Kann mir bitte jemand dabei helfen?Wie man einen kombinierten Satz von Feldern in Mongodb in Python einzigartig macht

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

Antwort

7

Sie indexes im meta dict der Klasse angeben:

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

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

Sie auch unique_with Mehrfeld Einzigartigkeit Einschränkungen durch mit angeben können, welche kann entweder ein einzelner Feldname sein, oder eine Liste oder Tupel von Feldnamen

In Ihrem Fall:

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

Oder komplizierter:

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