MongoDB Regex具有多个具有特殊字符的字符串

时间:2015-10-13 12:37:52

标签: regex mongodb mongodb-query

我在mongodb查询中遇到问题。我只需要从表格中获取那些行' Feed'其中字段名为' message'有子串'你&我'或者' abc? DEF'

我正在使用以下查询,但它无效。

db.getCollection('Feed').find({"message": { "$regex" : 'you & me | abc ? def'}});

我还为上面提供了一个替代解决方案,将所有特殊字符替换为十六进制值,如下面的查询所示。

db.getCollection('Feed').find({"message": { "$regex" : 'you \0x26 me | abc \0x3f def'}});

但是在这种情况下,结果只会出现给你\ 0x26 me'这意味着如果我转换十六进制值的特殊字符。它仅适用于第一个搜索正则表达式。

1 个答案:

答案 0 :(得分:1)

你需要逃避正则表达式中的?db.getCollection('Feed').find({ 'message': /\s*you \& me\s*|\s*abc \? def\s*/ }) 因为它们是特殊字符。

struct sockaddr_storage sin;
struct sockaddr_in *sin4;
struct sockaddr_in *sin6;
// IPV4 ---------------------------------------
if (ipv == true){
    sin4 = (struct sockaddr_in*)&sin;   
    if ( (s = socket(AF_INET, SOCK_STREAM, 0 ) ) < 0) { 
         perror("Chyba pri vytvareni socketu");  
         return -1;
    }


    sin4->sin_family = AF_INET;     
    sin4->sin_port = htons(port_number);
    sin4->sin_addr.s_addr  = INADDR_ANY;
}

// IPV6 ---------------------------------------
else{

    sin6 = (struct sockaddr_in6*)&sin;
    if ( (s = socket(AF_INET6, SOCK_STREAM, 0 ) ) < 0) { 
        perror("Chyba pri vytvareni socketu");  
        return -1;
    }

    sin6->sin6_family = AF_INET6;     
    sin6->sin6_port = htons(port_number);
    sin6->sin6_addr = in6addr_any;
    sin6->sin6_flowinfo = 0;
}   

if (bind(s, (struct sockaddr *)&sin, sizeof(sin) ) < 0 ) {
    printf("error on bind\n"); return -1;  
}

if (listen(s, 5)) { 
    printf ("error on listen\n"); 
    return -1;
}

sinlen = sizeof(sin);
pid_t pid;

while (1) {


     /* accepting new connection request from client,
     socket id for the new connection is returned in t */
     if ( (t = accept(s, (struct sockaddr *) &sin, &sinlen) ) < 0 ) {
         printf("error on accept\n");  /* accept error */
     return -1;
     }
     continues .... not important 

Demo