Jste si jisti, že je váš index vytvořen? můžete poskytnout výstup getIndexes()
vaší sbírky
např.:db.my_collection.getIndexes()
a vysvětlení vašeho dotazu
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()
PS:samozřejmě musím souhlasit s @Aesthete v tom, že ukládáte mnohem víc, než potřebujete...
Aktualizace z 29. 1. 2014
Perfektní! Jak vidíte, máte čtyři různé indexy, když můžete vytvořit JEDEN složený index, který je bude zahrnovat všechny.
definující
db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })
vám poskytne přesnější index, který vám umožní dotazovat se na:
year
year
amonth
year
amonth
aday
year
amonth
aday
ahour
Díky tomu budou vaše dotazy (se čtyřmi klíči) mnohem rychlejší, protože všechna vaše kritéria budou splněna v datech indexu!
všimněte si prosím, že pořadí klíčů v ensureIndex()
je zásadní, že pořadí ve skutečnosti definuje výše zmíněný seznam dotazů!
Všimněte si také, že pokud vše, co potřebujete, jsou tato 4 pole, pak pokud zadáte správnou projekci
např.: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 })
pak bude použit pouze index, což je maximální výkon!