Включить элементы регулярных выражений в BSONArrayBuilder

Класс BSONArrayBuilder в драйвере MongoDB C ++ API позволяет создавать массивы BSON, например.

BSONArrayBuilder ba;
ba.append("foo");
ba.append("bar");
...
connection->query("col", BSON("x" << BSON("$in" << ba.arr())));

выполнит запрос, равный следующему, в оболочке mongo:

db.col.find({"x": {"$in": [ "foo", "bar" ] }})

Однако мне нужно сделать запрос, основанный на регулярном выражении, а не на строках, следующим образом (это работает в оболочке mongo):

db.col.find({"x": {"$in": [ /^foo/, /^bar/ ] }})

Как я могу построить этот массив с помощью драйвера C ++? Обратите внимание, что BSONObjBuilder класс имеет appendRegex() метод, который не включен в класс BSONArrayBuilder

Любой обходной путь или указатель на информацию об этой проблеме высоко ценится. Спасибо!

2

Решение

Недавно мы добавили поддержку для этого в устаревшем выпуске драйвера MongoDB C ++, он будет в следующем выпуске кандидата на 1.0.0:

Билет JIRA в CXX Project

совершить

1

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

Обходной путь, который я проверил, это работает — создать строку JSON, а затем проанализировать ее с помощью метода fromjson ():

std::string s = "{\"x\": {\"$in\": [ /^foo/, /^bar/ ] }";
BSON b = fromjson(s);
connection->query("col", b);

Однако мне интересно, если использование метода fromjson () слишком дорого (из-за синтаксического анализа строк) по сравнению с прямым составом объектов BSON. Любое понимание этого, пожалуйста?

0