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



Windows 7 64 SP1 --MongoDB 2.2.0-rc2 --助推器 1.42 --MS VS 2010 终极版 --C++驱动程序

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

    someFunction( Query qu )

优势:

  1. 可以接受查询对象或格式正确的 BSONObj。
  2. 有权访问查询帮助程序,例如排序/提示/等。

缺点:

  1. 无法执行服务器端计数(相对于一批结果的客户端计数( 类似于壳牌的:

    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 )

优势:

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

缺点:

  1. 使用该函数的任何人都必须注意不要传递查询 作为违反直觉的查询对象。

所以,我的问题是:

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

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

因此,count应该收到BSONObj(或基础/派生/来自BSONObj(。

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);

最新更新