【问题标题】:How to make a combined set of fields unique in Mongodb in Python如何在 Python 中创建一组在 Mongodb 中唯一的字段组合
【发布时间】:2013-02-21 08:42:49
【问题描述】:

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

【问题讨论】:

    标签: python mongodb mongoengine


    【解决方案1】:

    您可以在类的meta dict 中指定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}
            ]
        }
    

    【讨论】:

      【解决方案2】:

      发件人: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'])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-02
        • 2016-08-09
        • 2011-08-21
        • 1970-01-01
        • 2015-01-11
        • 2021-02-09
        相关资源
        最近更新 更多