Why a query is not covered when using a range operator on documents?
db.doc.explain(true).find({doc:{$gt:d1.doc}},{_id:0,doc:1})


The above query doesn't use db.doc.createIndex({"doc":1}) index, because the index is created at embedded document level. To use this index, you should specify all fields in the document. For example 

db.doc.explain(true).find({"doc" : { "k1" : "v_0", "k2" : 0 }},{_id:0,doc:1})


or else you need to create an index at field level for embedded documents as shown below

db.doc.createIndex({"doc.k1":1});
db.doc.createIndex({"doc.k2":1});


For more details refer

Create an Index on an Embedded Field

Create an Index on Embedded Document