1º:Suas consultas são muito complicadas. Usando $elemMatch com muita frequência. 2º:se você puder incluir sua chave de fragmentação na consulta, isso melhorará drasticamente a velocidade.
Vou otimizar suas consultas para você:
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()
A linha inferior é esta:incluir sua chave de fragmentação cada vez é uma economia de tempo.
Pode até economizar tempo para percorrer suas chaves de fragmentação e fazer a mesma consulta várias vezes.