如何使用mongo db在django模型上创建唯一和复合索引

如何使用mongo db在django模型上创建唯一和复合索引,django,python-3.x,mongodb,mongoengine,Django,Python 3.x,Mongodb,Mongoengine,我使用的是djangi,创建了一个模型Person,只有很少的字段,希望实现索引以获得高效的结果 我已经在SQL上做过索引,但在mongoengine上我还是第一次做。 我一直在研究如何在name列上实现唯一索引 以及如何在电话号码和电子邮件字段上实现复合索引 谢谢你的帮助 from mongoengine import Document, fields class MongoDocument(object): def __unicode__(self): retur

我使用的是djangi,创建了一个模型
Person
,只有很少的字段,希望实现索引以获得高效的结果

我已经在SQL上做过索引,但在mongoengine上我还是第一次做。 我一直在研究如何在
name
列上实现唯一索引 以及如何在
电话号码和电子邮件
字段上实现复合索引

谢谢你的帮助

from mongoengine import Document, fields


class MongoDocument(object):
    def __unicode__(self):
        return unicode_class(self)

    def to_dict(self):
        return convert_to_dict(self)

class Person(Document, MongoDocument):
    name = fields.StringField(max_length=250)
    phone_number = fields.StringField(max_length=10)
    email = fields.StringField(max_length=250)
    active = fields.BooleanField(default=True)

如果只需要唯一性,可以在字段定义中使用
index=True
(例如
name=fields.StringField(max_length=250,unique=True)
)。如果需要复合索引或更奇特的索引定义,可以将索引定义传递给
meta
属性,如相应的中所述。 下面是官方文件中的示例

class Page(Document):
    category = IntField()
    title = StringField()
    rating = StringField()
    created = DateTimeField()
    meta = {
        'indexes': [
            'title',
            '$title',  # text index
            '#title',  # hashed index
            ('title', '-rating'),
            ('category', '_cls'),
            {
                'fields': ['created'],
                'expireAfterSeconds': 3600
            }
        ]
    }

根据mongoengine文档,您只需向字段添加
unique=True
。我e
name=fields.StringField(最大长度=250,唯一性=True)