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

#c #regex #mongodb #bson

#c #регулярное выражение #mongodb #bson

Вопрос:

Класс BSONArrayBuilder в MongoDB C driver 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

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

Комментарии:

1. Отсутствие ответов может означать, что это невозможно сделать с текущей реализацией драйвера C . Перейдите к запросу функции в MongoDB JIRA: jira.mongodb.org/browse/CXX-267

Ответ №1:

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

Билет JIRA в проекте CXX

Фиксация

Ответ №2:

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

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

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