Merci pour le cri sur Dex !
S'il n'est pas trop tard ici en 2013, l'index que je recommande pour éviter scanAndOrder ici est { _id :-1, cl :1, user_id :1 }.
La raison en est qu'un $lt sur _id et un $in sur user_id constituent des plages sur plusieurs "buckets" d'index. Un index de tout autre ordre que celui ci-dessus signifie que ces compartiments doivent toujours être triés ensemble pour satisfaire un tri sur _id. En mettant _id en premier, tous les documents visités dans l'index seront correctement triés à l'avance.
Notez qu'il s'agit d'une légère amélioration par rapport à la suggestion d'André ({ _id :-1, user_id :1, cl :1 }, qui devrait également éviter scanAndOrder) car elle permet à la vérification d'équivalence directe sur cl d'élaguer les résultats.
Découvrez http://blog.mongolab.com/2012/06/cardinal- ins/ pour plus de détails.