Windows 7 64 SP1 --MongoDB 2.2.0-rc2 --助推器 1.42 --MS VS 2010 终极版 --C++驱动程序
我有一个将查询对象作为参数的函数:
someFunction( Query qu )
优势:
- 可以接受查询对象或格式正确的 BSONObj。
- 有权访问查询帮助程序,例如排序/提示/等。
缺点:
无法执行服务器端计数(相对于一批结果的客户端计数( 类似于壳牌的:
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 )
优势:
- 可以执行服务器端计数。
- 可以转换为查询,因此使用其帮助程序。
缺点:
- 使用该函数的任何人都必须注意不要传递查询 作为违反直觉的查询对象。
所以,我的问题是:
为什么 Query 类的帮助程序方法不在 BSONObj 中实现?或者,相反,为什么无法使用 Query 类实现服务器端计数方法?
unsigned long long count (const string &ns, const BSONObj &query=BSONObj(),
int options=0)
因此,count
应该收到BSONObj
(或基础/派生/来自BSONObj
(。
Query
有implicit 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);