1

Windows 7 64 SP1-MongoDB 2.2.0-rc2-Boost 1.42-MS VS 2010Ultimate--C++ドライバー

Queryオブジェクトをパラメーターとして受け取る関数があります。

    someFunction( Query qu )

利点:

  1. Queryオブジェクトまたは整形式のBSONObjのいずれかを受け入れることができます。
  2. sort / Hint/etcなどのクエリヘルパーにアクセスできます。

不利益:

  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オブジェクトとしてクエリを渡さないように注意する必要があります。

だから、私の質問は次のとおりです。

QueryクラスのヘルパーメソッドがBSONObjに実装されていないのはなぜですか?または、逆に、サーバー側のcountメソッドを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)。

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);
于 2012-09-08T19:35:41.580 に答える