MongoDB C ++ драйвер на стороне сервера Количество запросов

Windows 7 64 SP1 —
MongoDB 2.2.0-rc2 —
Повышение 1.42 —
MS VS 2010 Ultimate —
C ++ драйвер

У меня есть функция, которая принимает объект запроса в качестве параметра:

    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? Или, наоборот, почему не удалось реализовать метод подсчета на стороне сервера с помощью класса Query?

1

Решение

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]