1er :Vos requêtes sont trop compliquées. Utiliser $elemMatch trop souvent. 2ème :si vous pouvez inclure votre clé de partition dans la requête, cela améliorera considérablement la vitesse.
Je vais optimiser vos requêtes pour vous :
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()
L'essentiel est le suivant :incluez votre clé de partition à chaque fois pour gagner du temps.
Cela pourrait même vous faire gagner du temps en parcourant vos clés de partition et en faisant la même requête plusieurs fois.