【发布时间】:2019-01-01 23:15:43
【问题描述】:
我正在使用 pymongo 和 mongoengine,下面是集合架构。
class Person(Document, BaseMixin):
school_id = StringField(required = True)
first_name = StringField(default="")
last_name = StringField(default="")
email = StringField(default="")
creation_time = DateTimeField(default = datetime.utcnow())
user_status = StringField(default='active') # possible values, 'active', 'blocked', 'deleted'
meta = {
'indexes': [('school_id', 'first_name'), ('school_id', 'user_status', 'first_name'),
('school_id', 'user_status', 'creation_time'), ('school_id', 'creation_time')],
'index_background': True
}
我想获取特定日期范围内的活跃用户和屏蔽用户列表,并按名字搜索活跃用户和屏蔽用户。 我正在浏览有关索引的 mongo 文档,发现该文档说明最好将状态索引归档mongo docs
我创建了上述索引来测试 mongo 在处理查询时选择了哪个索引。该集合包含多所学校的数据,因此在 school_id 上添加了索引。 第一个查询:使用的索引 = school_id_1_user_status_1_first_name_1
Person.objects(school_id = 'test', user_status__in = ['active', 'blocked'], first_name = 'test_name')
第二次查询:使用的索引 = school_id_1_creation_time_1
Person.objects(school_id = 'test', user_status__in = ['active', 'blocked'], creation_time__gte = datetime(2018, 7, 1))
所以我不确定在这种情况下如何使用索引?,任何人都可以提供有关它的更多信息。 另外,如果我的索引方案或集合模式有问题,请建议我。 谢谢。
【问题讨论】:
标签: python mongodb mongoengine database-indexes mongodb-indexes