Är du säker på att ditt index är skapat? kan du ge utdata från getIndexes()
av din samling
t.ex.:db.my_collection.getIndexes()
och förklaringen av din fråga
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()
PS:Självklart måste jag hålla med @Aesthete om att du lagrar mycket mer än du behöver...
29/1/2014 uppdatering
Perfekt! Som du ser har du fyra olika index när du kan skapa ETT sammansatt index som kommer att inkludera dem alla.
definiera
db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })
ger dig ett mer exakt index som gör att du kan fråga efter:
year
year
ochmonth
year
ochmonth
ochday
year
ochmonth
ochday
ochhour
Detta kommer att göra dina frågor (med de fyra nycklarna) mycket snabbare, eftersom alla dina kriterier kommer att uppfyllas i indexdata!
Observera att ordningen på nycklar i ensureIndex()
är avgörande, den ordningen definierar faktiskt ovan nämnda lista med frågor!
Observera också att om allt du behöver är dessa 4 fält, än om du anger en korrekt projektion
t.ex.: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 })
då kommer bara indexet att användas, vilket är maximal prestanda!