У меня довольно большая коллекция MongoDB (примерно 30 миллионов документов), пытающаяся получить максимум вложенного поля nested.my_time
.Монго версия 3.6.6.Я создал индекс для этого поля:
{
'my_index': {
'sparse': True,
'v': 2,
'background': True,
'key': [('nested.my_time', -1)],
'ns': 'my_db.my_table'
}
Соединение в pymongo:
import pymongo
mclient = pymongo.MongoClient('mongodb://myuri...')
db = mclient['my_db']
my_table = db['my_table']
Запросы, которые я пытался:
latest1 = my_table.find_one(
sort=[('nested.my_time', pymongo.DESCENDING)],
projection=['nested.my_time']
).hint('my_index')
.. делать полныйсканирование занимает слишком много времени.
latest2 = my_table.aggregate([{
'$sort': {
'nested.my_time': pymongo.DESCENDING,
}},{
'$limit': 1
}]).hint('my_index')
.. также выполняется полное сканирование
latest3 = my_table.aggregate([{
'$group': {
'_id': None,
'latest': {
'$max': '$nested.my_time'
}
}
}]).hint('my_index')
.. также выполняется полное сканирование.Когда я попытался просто получить документ с указанным my_time
, он работает, и он использует индекс:
foo = my_table.find(
filter={'nested.my_time': datetime(2019, 2, 4, 6, 57, 4, 534000)}
).limit(1)
.. таким образом, индекс явно работает и работает.Любые идеи, как заставить монго использовать индекс для макс?