Для всего, кроме группировки:
db.tblName.find({colName1:7},{val:1}).sort({colName3:-1, colName4:-1})
Но для группировки вы либо смотрите MapReduce , либо новую структуру агрегации (структура агрегации еще не находится в стабильной сборке, она только в 2.1.0 и нечетные выпуски не готовы к производству)
С Aggregation Framework, основанным на быстром сканировании документации и отсутствии доступа к последней версии Mongo (т.е. копирование и вставка не будут работать - это основа для начала):
db.tblName.aggregate(
{$match : {colName1:7}}, //filter by colName1=7
{$project: {val:1,colName2:1,colName3:1,colname4:1}}, //keep only the specified fields
{$group: {colname2:1}}, //group by colName2 - this is the bit I'm least clear on
{$sort: {colName3:-1; colname4:-1}}, //sort
{$project: {val:1}} //keep only the val column
)
Если кто-то хочет улучшить синтаксис (то есть тот, кто имеет доступ к Mongo с агрегацией), не стесняйтесь:)