我在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'这意味着如果我转换十六进制值的特殊字符。它仅适用于第一个搜索正则表达式。
答案 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