django - 如何使用 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)
解决方案
如果您只需要唯一性,则可以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
}
]
}
推荐阅读
- android - 如何在 Xamarin 中同时使用 Firebase Cloud Messaging 和 Firebase Auth?
- ssl - 将 rustls::Stream 添加到向量时,借用值的寿命不够长
- android - textCapWords 属性不适用于编辑文本
- sql - SQL 多个 WHERE 列与 LIKE 结合
- javascript - vue.js 将数据属性设置为方法的返回值
- memory-leaks - 为什么 Java11 将 java.util.zip.ZipFile$Source 保留在堆上?
- python - 切换大小写,如字典映射(值 = 方法)
- javascript - 从字符串javascript中提取特定长度的数字
- validation - Phalcon 4 messageEmpty 文件验证
- vb.net - 为什么当我处理表单并再次返回时 openFileDialog 没有响应?