Драйвер MongoDB C ++ — передача объекта Query по ссылке вызывает ошибку при последующем использовании его сортировки

Windows 7 64 SP1 —
MongoDB 2.2.0-rc2 —
Повышение 1.42 —
MS VS 2010 Ultimate —
C ++ драйвер

Я написал эту функцию:

void printQuery(DBClientConnection &c, std::string &dc, const Query &qu = BSONObj(), std::string sortby = "" )

Этот фрагмент:

auto_ptr<DBClientCursor> cursor;
cursor = c.query(dc,qu.sort(sortby))

выдает ошибку:

error C2663: 'mongo::Query::sort' : 2 overloads have no legal conversion for 'this' pointer.

sort (const string &field, int asc=1) должна быть соответствующая перегрузка. Я считаю, что это как-то связано с использованием const Query& с его функцией-членом sort, Но если я изменю это на Query& без constтогда моя инициализация параметра = BSONObj() поднимает:

cannot convert from 'mongo::BSONObj' to 'mongo::Query &'

Если я передам по значению, то он компилируется нормально.

Есть ли способ избежать любой из ошибок (помимо передачи по значению)?
Спасибо!

0

Решение

Дэвид Хоус у пользователя MongoDB провел меня через решение:

Вместо const Query &qu = BSONObj()использовать Query &qu = Query(),

  1. Я получаю сообщение об ошибке, используя const «потому что сортировка изменит значение объекта запроса, который определяется как константа». Итак, я бросил это.

  2. Использование BSONObj () по умолчанию проблематично, потому что я не «создаю новый объект, а присваиваю новый BSONObj в переменную для объекта Query, ничего нового не создается, поэтому вызов конструктора отсутствует».

Поэтому я использовал Query () вместо этого. if ( qu.obj == BSONObj() ) работает для тестирования, если qu пуст.

Моя последняя функция:

void printQuery(DBClientConnection &c, const string &dc, Query &qu = Query(), const string &sortby = "" )

Я не мог сделать DBClientConnection квалифицируется как const, Это подняло no legal conversion for 'this' pointer при использовании c.query и

C2662: 'mongo::DBClientWithCommands::count' : cannot convert 'this' pointer from 'const mongo::DBClientConnection' to 'mongo::DBClientWithCommands &' Conversion loses qualifiers

при использовании c.count. Поэтому я оставил это безоговорочным.

1

Другие решения

Вы должны сортировать курсор, а не на qu, который я предполагаю, чтобы быть вашим запросом BSON. например.

auto_ptr<DBClientCursor> cursor;
cursor = c.query(dc,qu).sort(sortby)

Проверять, выписываться http://www.mongodb.org/pages/viewpage.action?pageId=133415#C%2B%2BTutorial-Sorting для дополнительной информации.

0

По вопросам рекламы [email protected]