code: func (q *Query) Explain(result interface{}) error {
  	q.m.Lock()
  	clone := &Query{session: q.session, query: q.query}
  	q.m.Unlock()
  	clone.op.options.Explain = true
  	clone.op.hasOptions = true
  	if clone.op.limit > 0 {
  		clone.op.limit = -q.op.limit
  	}
  	iter := clone.Iter()
  	if iter.Next(result) {
  		return nil
  	}
  	return iter.Close()
  }
docs: // Explain returns a number of details about how the MongoDB server would
  // execute the requested query, such as the number of objects examined,
  // the number of times the read lock was yielded to allow writes to go in,
  // and so on.
  //
  // For example:
  //
  //     m := bson.M{}
  //     err := collection.Find(bson.M{"filename": name}).Explain(m)
  //     if err == nil {
  //         fmt.Printf("Explain: %#v\n", m)
  //     }
  //
  // Relevant documentation:
  //
  //     http://www.mongodb.org/display/DOCS/Optimization
  //     http://www.mongodb.org/display/DOCS/Query+Optimizer
  //