MongoDB Documentation, Release 3.0.4 The compound index can support the following queries: { status: 1, ord_date: -1 } db.orders.find( { status: { $in: ["A", "P" ] } } ) db.orders.find( { ord_date: { $gt: new Date("2014-02-01") }, status: {$in:[ "P", "A" ] } } ) Index Intersection and Sort 8.2.5 Multikey Index Bounds But not the following two queries: db.orders.find( { ord_date: { $gt: new Date("2014-02-01") } } ) db.orders.find( { } ).sort( { ord_date: 1 } ) However, if the collection has two separate indexes: { status: 1 } { ord_date: -1 } The two indexes can, either individually or through index intersection, support all four aforementioned queries. The choice between creating compound indexes that support your queries or relying on index intersection depends on the specifics of your system. compound indexes (page 489), Create Compound Indexes to Support Several Different Queries (page 547) See also: Index intersection does not apply when the sort() operation requires an index completely separate from the query predicate. For example, the orders collection has the following indexes: MongoDB cannot use index intersection for the following query with sort: db.orders.find( { qty: { $gt: 10 } } ).sort( { status: 1 } ) That is, MongoDB does not use the { qty: 1 } index for the query, and the separate { status: 1 } or the { status: 1, ord_date: -1 } index for the sort. However, MongoDB can use index intersection for the following query with sort since the index { status: 1, ord_date: -1 } can fulfill part of the query predicate. db.orders.find( { qty: { $gt: 10 } , status: "A" } ).sort( { ord_date: -1 } ) { qty: 1 } { status: 1, ord_date: -1 } { status: 1 } { ord_date: -1 } The bounds of an index scan define the portions of an index to search during a query. When multiple predicates over an index exist, MongoDB will attempt to combine the bounds for these predicates by either intersection or compounding 511 8.2. Index Concepts