Windows 7 64 SP1-
MongoDB 2.2.0-rc2-
提升1.42-
MS VS 2010 Ultimate-
C++驱动程序

我有一个将Query对象作为参数的函数:

    someFunction( Query qu )

好处:
  • 可以接受查询对象或格式正确的BSONObj。
  • 可以访问查询助手,例如sort / hint / etc。

  • 坏处:
  • 无法执行服务器端计数(相对于一批结果的客户端计数)
    类似于 shell 的:
    nstudents = db.students.find({'address.state' : 'CA'}).count();
    


    unsigned long long n = c.count("mydb.users", qu);
    

    引发错误:
    cannot convert ... from 'mongo::Query' to 'const mongo::BSONObj &
    

  • 因此,建议我使用BSONObj作为参数:
        someFunction ( BSONObj qu )
    

    好处:
  • 可以进行服务器端计数。
  • 可以转换为查询,因此可以使用其助手。

  • 坏处:
  • 使用该功能的任何人都必须知道而不是才能通过查询
    作为违反直觉的查询对象。

  • 因此,我的问题是:

    为什么不在BSONObj中实现Query类的帮助器方法?或者相反,为什么不能用Query类实现服务器端计数方法?

    最佳答案

    unsigned long long count (const string &ns, const BSONObj &query=BSONObj(),
    int options=0)
    

    因此,count应该接收BSONObj(或Base / Derived from BSONObj)。
    Query具有implicit c-tor,它接收BSONObj
    Query (const BSONObj &b)
    
    Query具有公共(public)成员obj,即BSONObj

    你的功能可以是
    // i think const Query& qu will be better.
    someFunction( Query qu )
    

    对于count调用,您应该使用
    c.count("mydb.users", qu.obj);
    

    关于c++ - MongoDB C++驱动程序服务器端查询计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12333725/

    10-11 18:00