Node.js查询MongoDB以返回以数组中任何值开头的所有匹配项
我试图通过Node.js应用程序查询MongoDB,以返回以以下数组中的任何条目开头的所有匹配项:['p'、'q'、'r'、's'、't'] 我知道如何对单个值执行“开始于”:Node.js查询MongoDB以返回以数组中任何值开头的所有匹配项,node.js,regex,mongodb,Node.js,Regex,Mongodb,我试图通过Node.js应用程序查询MongoDB,以返回以以下数组中的任何条目开头的所有匹配项:['p'、'q'、'r'、's'、't'] 我知道如何对单个值执行“开始于”: var value = 't'; genericCollection.find({ 'key' : new RegExp('^' + value, 'i')}).toArray(function (err, items) { res.send(items); }); 返回: [ { "_
var value = 't';
genericCollection.find({ 'key' : new RegExp('^' + value, 'i')}).toArray(function (err, items) {
res.send(items);
});
返回:
[
{
"_id": "59788e1a1b4a3901c7fd5501",
"key": "t-key",
"value": "t-value",
"lastModified": "2018-11-27T12:18:30.029Z"
}
]
[
{
"_id": "59788e1a1b4a3901c7fd5501",
"key": "t-key",
"value": "t-value",
"lastModified": "2018-11-27T12:18:30.029Z"
},
{
"_id": "5978ba139553e32697564d7e",
"key": "p-key",
"value": "p-value",
"lastModified": "2018-11-27T12:18:55.966Z"
}
]
我知道如何进行“匹配任何这些值”查询:
返回:
[
{
"_id": "59788e1a1b4a3901c7fd5501",
"key": "t-key",
"value": "t-value",
"lastModified": "2018-11-27T12:18:30.029Z"
}
]
[
{
"_id": "59788e1a1b4a3901c7fd5501",
"key": "t-key",
"value": "t-value",
"lastModified": "2018-11-27T12:18:30.029Z"
},
{
"_id": "5978ba139553e32697564d7e",
"key": "p-key",
"value": "p-value",
"lastModified": "2018-11-27T12:18:55.966Z"
}
]
但是如何将这两者结合起来,以便从数据库中获得所有以这些数组值开头的结果呢?您可能可以使用一个名为
[pqrst]
genericCollection.find({ 'key' : new RegExp('^[pqrst]', 'i')}).toArray(function (err, items) {
res.send(items);
});
您可以从多字符字符串构建基于替换的模式,同时牢记必要的分组构造(以便
^
可以应用于所有替换):
请注意,如果值包含特殊的正则表达式元字符,则需要正确转义:
new RegExp('^(?:' + values.map(function(x) {return x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');}).join('|') + ')', 'i')
看起来像
^(?:t1|p2|mN)
详细信息
-字符串的开头^
-与任何备选方案匹配的非捕获组:(?:t1 | p2 | mN)
,t1
,p2
mN
新的RegExp(“^(?:”+values.join(“|”)+”,“I”)
字符类将比可选字符(假设值大小为1)更快@mrzasa如果它们确实是单个字符,那么字符类肯定会更合适newregexp('^['+values.map(函数(x){return x.replace(/[\]^\-]/g,\\$&');})。join('''+']','i')
。在字符类中,]
、^
、\
和-
将需要转义。@WiktorStribiżew感谢Wiktor,完成了任务。你能把它作为问题的答案贴出来吗?我会接受的。谢谢你的回答,它非常适合描述的问题。不过,我必须给Wiktor一个可接受的答案,因为将来我将要求数组包含多字符串的条目