Första:Dina frågor är alltför komplicerade. Använder $elemMatch alldeles för ofta. 2nd:om du kan inkludera din shard-nyckel i frågan kommer det att drastiskt förbättra hastigheten.
Jag ska optimera dina frågor för dig:
db.user.find({
createdAt: {
$gte: ISODate("2014-12-01"),
$lte: ISODate("2014-12-31")
}
}).explain()
db.user.find({
'transaction.product':'mobile'
}).explain()
db.user.find({
'transaction.product':'mobile',
firstTransaction:{
$in:[
ISODate("2015-01-01"),
ISODate("2015-01-02")
]
}
}).explain()
Slutsatsen är detta:inkludera din shard-nyckel varje gång är en tidsbesparande.
Det kan till och med spara tid att gå igenom dina shard-nycklar och göra samma fråga flera gånger.