MongoDB C驱动:如何使用正则表达式查询集合?

时间:2017-12-11 03:33:23

标签: c++ c mongodb mongodb-query

例如,在MySQL中,查询如下:

select name from test_tab where id = 1 and  name like 'test%'; 

我想通过mongodb C驱动程序在mongodb中翻译这个查询,所以我写这样的代码,但都不起作用(searchDoc()函数没问题。

string strName = "";
bson_t *cond = bson_new();
BSON_APPEND_INT32(cond, "id", 1);
if (strlen(name.c_str()) > 0)
{
    strName = "/^" + name + "/";
    bson_t *child;
    child = bson_new();
    bson_append_document_begin(cond, "name", -1, child);
    BSON_APPEND_UTF8(child, "$regex", strName.c_str());
    bson_append_document_end(cond, child);
}
mongoc_cursor_t *cursor(NULL);
int iRet = searchDoc("db", "test_tab", cond, cursor);
if (iRet < 0)
{
    bson_destroy(cond);
    mongoc_cursor_destroy(cursor);
    return -1;
}

string strName = "";
bson_t *cond = bson_new();
BSON_APPEND_INT32(cond, "id", 1);
if (strlen(name.c_str()) > 0)
{
    strName = "/^" + name + ".*/";
    BSON_APPEND_REGEX(cond, "name", strName.c_str(), "i");
}
mongoc_cursor_t *cursor(NULL);
int iRet = searchDoc("db", "test_tab", cond, cursor);
if (iRet < 0)
{
    bson_destroy(cond);
    mongoc_cursor_destroy(cursor);
    return -1;
}

如何构建正则表达式模式以查询记录工作好吗? 谢谢

1 个答案:

答案 0 :(得分:0)

我查看此页面:https://jira.mongodb.org/browse/CDRIVER-206, 有一个重要的提示:“在构建正则表达式时,您不需要包含正斜杠。”

所以我删除了正斜杠,我的代码

 strName = "/^" + name + ".*/"; 
 BSON_APPEND_REGEX(cond, "name", strName.c_str(), "i");

更改为

  strName = "/^" + name + ".*/";
  BSON_APPEND_REGEX(cond, "name", strName.c_str(), "i");

它可以工作。我的问题已经解决了。