gpt4 book ai didi

regex - 如何使用 mongocxx 在 mongoDB 查询中发送正则表达式?

转载 作者:可可西里 更新时间:2023-11-01 10:19:15 28 4
gpt4 key购买 nike

以下是我尝试使用 mongocxx 驱动程序查询 mongodb 的一段代码。

/*查找所有匹配过滤器的代码*/

mongocxx::cursor cursor = collection.find(
document{} << "Vehicle_Registration" << vReg
<< "Vehicle_Make" << vMake
<< "Vehicle_Model" << vModel
<< "Vehicle_Owner" << vOwner
<< finalize);

这里

Vehicle_Registration, Vehicle_Make, Vehicle_Model, Vehicle_Owner

是集合的字段。

的值(value)

vReg, vMake, vModel , vOwner

由用户在屏幕上指定。如果用户仅指定了这些值中的一些(不是全部),则其余值将保持为 NULL。为了避免搜索 NULL 值,我尝试将它们设置为正则表达式 { $regex:/./} 这样 NULL 值就不会影响搜索。

这个正则表达式适用于 mongo shell,所有设置为这个正则表达式的字段都会被忽略,不会影响搜索。

但是在代码中,要设置这个正则表达式我会这样做:

If (vReg == NULL) {  vreg = "{ $regex: /./ }"  }

然后在文档中传递 vReg{},如顶部代码所示

document{} << "Vehicle_Registration" << vReg

这里 vReg 作为字符串 "{ $regex:/./}"(带引号)传递,而不是 { $regex:/./} (不带引号)。因此,它被认为是一个字符串,而不是作为查询中的正则表达式进行评估,因此没有搜索结果。

有人可以帮我知道如何将它作为正则表达式传递吗?

谢谢!

最佳答案

您需要使正则表达式子句成为适当的 BSON 子文档,而不是字符串。幸运的是,bsoncxx::types::b_regex 类型为您提供了一个快捷方式,当添加到 BSON 文档时,它会扩展到子文档。

更新:要了解如何切换您描述的方式,这里有一个使用三元运算符然后将查询字符串或正则表达式包装在 bsoncxx::types 中的示例::value,这是一个联合类型:

using namespace bsoncxx::builder::stream;
using namespace bsoncxx::types;

int main() {
auto inst = mongocxx::instance{};
auto client = mongocxx::client{mongocxx::uri{}};
auto coll = client["test"]["regex_question"];
coll.drop();

std::string vModel;
auto empty_regex = b_regex(".", "");

coll.insert_one(document{} << "Vehicle_Make"
<< "Toyota"
<< "Vehicle_Model"
<< "Highlander" << finalize);

auto filter = document{} << "Vehicle_Make"
<< "Toyota"
<< "Vehicle_Model"
<< (vModel.empty() ? value{empty_regex} : value{b_utf8{vModel}})
<< finalize;

std::cout << bsoncxx::to_json(filter) << std::endl;

std::cout << "Found " << coll.count(filter.view()) << " document(s)" << std::endl;
}

这给出了这个输出:

{ "Vehicle_Make" : "Toyota", "Vehicle_Model" : { "$regex" : ".", "$options" : "" } }
Found 1 document(s)

关于regex - 如何使用 mongocxx 在 mongoDB 查询中发送正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41086448/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com