C++ MongoDB C++;驱动程序--通过引用传递查询对象在随后使用其排序时引发错误
Windows 7 64 SP1-- MongoDB 2.2.0-rc2-- 增加1.42-- MS VS 2010终极版-- C++驱动程序< /P> 我编写了这个函数:C++ MongoDB C++;驱动程序--通过引用传递查询对象在随后使用其排序时引发错误,c++,mongodb,mongodb-query,mongodb-c,C++,Mongodb,Mongodb Query,Mongodb C,Windows 7 64 SP1-- MongoDB 2.2.0-rc2-- 增加1.42-- MS VS 2010终极版-- C++驱动程序< /P> 我编写了这个函数: void printQuery(DBClientConnection&c,std::string&dc,const Query&qu=BSONObj(),std::string sortby=“”) 这个片段: auto_ptr<DBClientCursor> cursor; cursor = c.query(d
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))
auto_ptr光标;
游标=c.query(dc,qu.sort(sortby))
引发错误:
错误C2663:'mongo::Query::sort':2个重载对'this'指针没有合法转换。
排序(常量字符串和字段,int asc=1)
应该是适用的重载。我相信这与使用constquery&
及其成员函数sort
有关。但是如果我将其更改为Query&
而不使用const
,那么我的参数初始化=BSONObj()
将引发:
无法从“mongo::BSONObj”转换为“mongo::Query&”
如果我通过值传递,那么它编译得很好
有没有办法避免这两种错误(除了传递值之外)?
谢谢 您应该对光标进行排序,而不是在
qu
上,我假定这是您的BSON查询。例如
auto_ptr<DBClientCursor> cursor;
cursor = c.query(dc,qu).sort(sortby)
auto_ptr光标;
游标=c.query(dc,qu).排序(sortby)
查看了解更多信息。David Hows向我介绍了解决方案:
不要使用Query&qu=BSONObj()
,而是使用Query&qu=Query()
const
“因为排序将更改查询对象的值(定义为常量)”,我收到了一个错误,因此我删除了它if(qu.obj==BSONObj())
用于测试qu是否为空
我的最后一项职能是:
void printQuery(DBClientConnection&c,const string&dc,Query&qu=Query(),const string&sortby=“”)
我无法将DBClientConnection
限定为const
。当使用c.query和
C2662:'mongo::DBClientWithCommands::count':无法将'this'指针从'const mongo::DBClientConnection'转换为'mongo::DBClientWithCommands&'转换将丢失限定符
当使用c.count时。因此,我将其保留为非限定值。为什么使用默认值进行查询?因为我希望能够在没有查询的情况下调用它,以便它在默认情况下打印集合中的所有文档。我确实使用重载函数重写了,但遇到了相同的问题。我在没有
常量的情况下使用重载函数重写了,但遇到了类似的问题--我无法再传递BSONObjs--mongo::BSONObj
无法转换为mongo::Query&
所有传递的查询对象都很好。它似乎在查询上排序:auto_ptr cursor=c.query(“tutorial.persons”,query(“age”)要在查询上排序,它将显示为:“应该是”,要在光标上排序,它将显示为: