#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:
Ответ №2:
Обходной путь, который, как я проверил, работает, заключается в создании строки JSON, а затем ее разборе с помощью метода fromjson():
std::string s = "{"x": {"$in": [ /^foo/, /^bar/ ] }";
BSON b = fromjson(s);
connection->query("col", b);
Однако мне интересно, является ли использование метода fromjson() слишком дорогостоящим (из-за синтаксического анализа строк) по сравнению с прямой композицией объектов BSON. Любое представление об этом, пожалуйста?