1

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

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

    someFunction( Query qu )

优点:

  1. 可以接受 Query 对象或格式良好的 BSONObj。
  2. 可以访问查询助手,例如排序/提示/等。

坏处:

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

    nstudents = db.students.find({'address.state' : 'CA'}).count();
    

    IE,

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

    引发错误:

    cannot convert ... from 'mongo::Query' to 'const mongo::BSONObj &
    

因此,建议我使用 BSONObj 作为参数:

    someFunction ( BSONObj qu )

优点:

  1. 可以做一个服务器端计数。
  2. 可以转换为 Query 并因此使用它的助手。

坏处:

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

所以,我的问题是:

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

4

1 回答 1

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

因此,count应该接收BSONObj(或 Base/Derived of/from 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);
于 2012-09-08T19:35:41.580 回答