Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MongoDB C++;驱动程序--通过引用传递查询对象在随后使用其排序时引发错误_C++_Mongodb_Mongodb Query_Mongodb C - Fatal编程技术网

C++ MongoDB C++;驱动程序--通过引用传递查询对象在随后使用其排序时引发错误

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

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(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
    “因为排序将更改查询对象的值(定义为常量)”,我收到了一个错误,因此我删除了它

  • 使用BSONObj()作为默认值是有问题的,因为我不是“创建一个新对象,而是将一个新的BSONObj赋给一个查询对象的变量,没有创建任何新的对象,因此没有构造函数调用。”

  • 所以我改用Query()
    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”)要在查询上排序,它将显示为:“应该是”,要在光标上排序,它将显示为: