1-во:Вашите запитвания са прекалено сложни. Твърде често използване на $elemMatch. 2-ро:ако можете да включите своя shard ключ в заявката, това драстично ще подобри скоростта.
Ще оптимизирам вашите заявки вместо вас:
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()
Изводът е следният:включването на вашия shard ключ всеки път е спестяване на време.
Може дори да спестите време, за да преминете през вашите shard ключове и да направите една и съща заявка няколко пъти.