MongoDB C ++驱动程序服务器端查询计数

时间:2012-09-08 19:19:31

标签: c++ mongodb mongodb-query mongodb-c

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

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

    someFunction( Query qu )

优点:

  1. 可以接受Query对象或格式良好的BSONObj。
  2. 可以访问查询帮助程序,例如sort / hint / etc.
  3. 缺点:

    1. 无法进行服务器端计数(与一批结果的客户端计数相比)   类似于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 &
      
    2. 所以,有人建议我使用BSONObj作为参数:

          someFunction ( BSONObj qu )
      

      优点:

      1. 可以进行服务器端计数。
      2. 可以转换为查询,因此可以使用其帮助程序。
      3. 缺点:

        1. 使用此功能的任何人都必须知道才能传递查询    作为一个反直觉的Query对象。
        2. 所以,我的问题是:

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

1 个答案:

答案 0 :(得分:1)

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

因此,count应该会收到BSONObj(或来自BSONObj的Base / Derived /。)

Queryimplicit c-tor,收到BSONObj

Query (const BSONObj &b)

Query有公开成员obj,即BSONObj

您的功能可以

// i think const Query& qu will be better.
someFunction( Query qu )

并且对于来电count,您应该使用

c.count("mydb.users", qu.obj);