void DocumentSourceCursor::sourceToBson( BSONObjBuilder *pBuilder, bool explain) const { /* this has no analog in the BSON world, so only allow it for explain */ if (explain) { BSONObj bsonObj; pBuilder->append("query", *pQuery); if (pSort.get()) { pBuilder->append("sort", *pSort); } // construct query for explain BSONObjBuilder queryBuilder; queryBuilder.append("$query", *pQuery); if (pSort.get()) queryBuilder.append("$orderby", *pSort); queryBuilder.append("$explain", 1); Query query(queryBuilder.obj()); DBDirectClient directClient; BSONObj explainResult(directClient.findOne(ns, query)); pBuilder->append("cursor", explainResult); } }
void DocumentSourceCursor::sourceToBson( BSONObjBuilder *pBuilder, bool explain) const { /* this has no analog in the BSON world, so only allow it for explain */ if (explain) { BSONObj bsonObj; pBuilder->append("query", _query); if (!_sort.isEmpty()) { pBuilder->append("sort", _sort); } BSONObj projectionSpec; if (_projection) { projectionSpec = _projection->getSpec(); pBuilder->append("projection", projectionSpec); } // construct query for explain BSONObjBuilder queryBuilder; queryBuilder.append("$query", _query); if (!_sort.isEmpty()) queryBuilder.append("$orderby", _sort); queryBuilder.append("$explain", 1); Query query(queryBuilder.obj()); DBDirectClient directClient; BSONObj explainResult(directClient.findOne(ns, query, _projection ? &projectionSpec : NULL)); pBuilder->append("cursor", explainResult); } }