Shi*_*ury 8 regex arrays mongodb
好吧,我正在尝试实现一个查询,它试图在一堆文件上执行正则表达式搜索(其中包含一个数组列表)
我很难解释......所以我基本上是直接指向.
有查询适用于正则表达式数组...
db.paper.find({"category": {$in: [ /xd/, /sd/, /ad/ ] }})
Run Code Online (Sandbox Code Playgroud)
有查询不适用于正则表达式数组...
db.paper.find({"category": {$in: [ "/xd/", "/sd/", "/ad/" ] }})
Run Code Online (Sandbox Code Playgroud)
所以基本上我想要的是从字符串数组中删除""符号...这样我就可以执行以下查询..
var sea = [ "/xd/", "/sd/", "/ad/" ];
db.paper.find({"category": {$in: sea }});
Run Code Online (Sandbox Code Playgroud)
Tee*_*eez 11
当双引号存在时它不起作用,因为它们被解释为字符串而不是RegExp对象.所以要使它工作,你必须RegExp首先在Javascript中将它转换为对象.
var sea = [ "xd", "sd", "ad" ]; // Note: no slashes
var regex = [];
for (var i = 0; i < sea.length; i++) {
regex[i] = new RegExp(sea[i]);
}
db.paper.find({"category": {$in: regex}});
Run Code Online (Sandbox Code Playgroud)
请记住,MongoDB shell使用Javascript
使用 $in对于较小的数组,可能会相当有效,但对于庞大的列表,可能会不太有效,因为它会在索引中跳过以查找匹配的文档,或者在没有索引可使用的情况下遍历整个集合。
除了 在正则表达式中使用$ in,还可以将管道分隔的正则表达式与关键字列表一起使用,如下所示:
测试文件:
db.papertest.insert([
{ category: "ad bd cd" },
{ category: "dd ed fd" },
{ category: "gd hd id" },
{ category: "jd kd ld" },
{ category: "md nd od" },
{ category: "pd qd rd" },
{ category: "sd td ud" },
{ category: "vd wd xd yd zd" },
]);
Run Code Online (Sandbox Code Playgroud)
魔法:
var keywords = ["xd", "sd", "ad"],
regex = keywords.join("|");
db.papertest.find({
"category": {
"$regex": regex,
"$options": "i"
}
});
Run Code Online (Sandbox Code Playgroud)
结果
{ "_id" : ObjectId("56bb6f171bb4f693057c0ba4"), "category" : "ad bd cd" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0baa"), "category" : "sd td ud" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0bab"), "category" : "vd wd xd yd zd" }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11103 次 |
| 最近记录: |