Erstens:Ihre Abfragen sind zu kompliziert. Verwenden Sie $elemMatch viel zu oft. Zweitens:Wenn Sie Ihren Shard-Schlüssel in die Abfrage einbeziehen können, wird dies die Geschwindigkeit drastisch verbessern.
Ich werde Ihre Abfragen für Sie optimieren:
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()
Fazit:Wenn Sie Ihren Shard-Schlüssel jedes Mal einschließen, sparen Sie Zeit.
Es kann sogar Zeit sparen, Ihre Shard-Schlüssel zu durchlaufen und dieselbe Abfrage mehrmals durchzuführen.