Danke für den Gruß an Dex!
Wenn es hier im Jahr 2013 noch nicht zu spät ist, empfehle ich hier den Index { _id:-1, cl:1, user_id:1 }, um scanAndOrder zu vermeiden.
Der Grund dafür ist, dass ein $lt auf _id und ein $in auf user_id Bereiche über mehrere Index-"Buckets" hinweg darstellen. Ein Index in einer anderen Reihenfolge als der oben genannten bedeutet, dass diese Buckets immer noch zusammen sortiert werden müssen, um eine Sortierung nach _id zu erfüllen. Indem _id an erster Stelle steht, werden alle im Index besuchten Dokumente im Voraus richtig geordnet.
Beachten Sie, dass dies eine leichte Verbesserung gegenüber Andres Vorschlag ist ({ _id:-1, user_id:1, cl:1 }, was auch scanAndOrder vermeiden sollte), da es die direkte Äquivalenzprüfung auf cl ermöglicht, um Ergebnisse zu beschneiden.
Sehen Sie sich http://blog.mongolab.com/2012/06/cardinal- ins/ für mehr Details.