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 &'
Если я передам по значению, то он компилируется нормально.
Есть ли способ избежать любой из ошибок (помимо передачи по значению)?
Спасибо!
Дэвид Хоус у пользователя MongoDB провел меня через решение:
Вместо const Query &qu = BSONObj()
использовать Query &qu = Query()
,
Я получаю сообщение об ошибке, используя const
«потому что сортировка изменит значение объекта запроса, который определяется как константа». Итак, я бросил это.
Использование 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. Поэтому я оставил это безоговорочным.
Вы должны сортировать курсор, а не на 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 для дополнительной информации.