¿Estás seguro de que se ha creado tu índice? podría proporcionar la salida de getIndexes()
de tu colección
por ejemplo:db.my_collection.getIndexes()
y la explicación de su consulta
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()
PD:por supuesto, debo estar de acuerdo con @Aesthete sobre el hecho de que almacenas mucho más de lo que necesitas...
Actualización del 29/1/2014
¡Perfecto! Como puede ver, tiene cuatro índices diferentes cuando puede crear UN índice compuesto que los incluirá a todos.
definiendo
db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })
le proporcionará un índice más preciso que le permitirá consultar:
year
year
ymonth
year
ymonth
yday
year
ymonth
yday
yhour
¡Esto hará que sus consultas (con las cuatro teclas) sean mucho más rápidas, porque todos sus criterios se cumplirán en los datos del índice!
tenga en cuenta que el orden de las claves en ensureIndex()
es crucial, ¡ese orden en realidad define la lista de consultas mencionada anteriormente!
También tenga en cuenta que si todo lo que necesita son estos 4 campos, si especifica una proyección correcta
por ejemplo:db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28}, { created_at_year: 1, created_at_month: 1, created_at_day: 1 })
entonces solo se usará el índice, ¡que es el máximo rendimiento!