Sei sicuro che il tuo indice sia stato creato? potresti fornire l'output di getIndexes()
della tua collezione
es:db.my_collection.getIndexes()
e la spiegazione della tua richiesta
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()
PS:ovviamente devo essere d'accordo con @Aesthete sul fatto che immagazzini molto più del necessario...
Aggiornamento 29/1/2014
Perfetto! Come vedi hai quattro diversi indici quando puoi creare UN indice composto che li includerà tutti.
definizione
db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })
ti fornirà un indice più preciso che ti consentirà di eseguire query per:
year
year
emonth
year
emonth
eday
year
emonth
eday
ehour
Ciò renderà le tue query (con le quattro chiavi) molto più veloci, perché tutti i tuoi criteri verranno soddisfatti nei dati dell'indice!
tieni presente che l'ordine delle chiavi in ensureIndex()
è fondamentale, quell'ordine definisce effettivamente l'elenco di query sopra menzionato!
Nota anche che se tutto ciò di cui hai bisogno sono questi 4 campi, allora se specifichi una proiezione corretta
eg: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 })
quindi verrà utilizzato solo l'indice, che è la massima performance!