首页 > 解决方案 > 如何使用 mongo db 在 django 模型上创建唯一和复合索引

问题描述

我正在使用 djangi 并创建了一个Person具有少量字段的模型,并希望实现索引以获得有效的结果。

我已经在 SQL 上完成了索引,但是我第一次使用 mongoengine。我被困在如何在name列上实现唯一索引以及如何在字段上实现复合索引phone_number and email

谢谢您的帮助

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)

标签: djangopython-3.xmongodbmongoengine

解决方案


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

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

推荐阅读