用于匹配 MongoDB 字符串的正则表达式

标签 regex mongodb mongoose mongodb-query regex-lookarounds

我正在使用 mongoose 并且有大量这样的对象:

{
"_id" : ObjectId("5bfeb4aa0a49bf3d84d885b5"),
"category" : [ 
    "Cult", 
    "Space Opera"
],
"actors" : [ 
    "David Prowse in the role of Darth Vader", 
    "Mark Hamill as Luke Skywalker", 
    "Carrie Fisher as Leia Organa", 
    ...
],
"title" : "Star Wars",
"description" : ".....",
"rating" : 4.65,
"__v" : 0

我需要找到所有与我的 Actor 阵容匹配的电影

例如:["David Prowse", "Mark Hamill", "Carrie Fisher"]

使用这个数组,其中一部电影应该是星球大战,但在电影对象中没有干净的 Actor 名字,所以可能需要与正则表达式或类似的东西匹配以匹配子字符串(不区分大小写).

我的实际查询总是返回空文档数组------------

let arrayOfqueries = [];

    for (let i = 0; i < arrayOfActors.length; i++) {
        arrayOfqueries.push({$regex: ".*" + arrayOfActors[i] + ".*", $options: "i"});
    }

    Utils.searchFilms({
        "actors": {
            "$all": arrayOfqueries
        }
    }).then((docs) => {
        console.log(docs)
    }).catch((err) => {
        console.log(err);
    });

最佳答案

我猜这里一个简单的捕获组可能就足够了。然后,基于 Fanpark 解决方案,您的代码可能如下所示:

for (let i = 0; i < arrayOfActors.length; i++) {
  arrayOfqueries.push(new RegExpr("(" + arrayOfActors[i] + ")"))
}

如果还是不行,我们可以试试其他的表达方式,比如:

(?:[\s\S]*)(David Prowse)(?:[\s\S]*)

我们的代码可能如下所示:

arrayOfqueries.push(new RegExpr("(?:[\s\S]*)(" + arrayOfActors[i] + ")(?:[\s\S]*)"))

另外,metachars 应该被转义。

DEMO

关于用于匹配 MongoDB 字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56313213/

相关文章:

mongodb - 我如何在 Centos 6 中安装 php5-dev

node.js - 如何正确使用函数 populate()

node.js - 将选项设置为 Mongoose 架构中的数组字段

php - preg_match 范围内的匹配点

Javascript 查找 url 并将其替换为链接并在需要时 chop 文本

mongodb - 如何在 mongo DB shell 中查询后遍历结果对象

javascript - 更新 Mongoose 文档失败 TypeError : Cannot read property 'coordinates' of undefined

用于数学运算的 PHP 正则表达式

python正则表达式强制换行

mongodb - 如何查看 mongoose.js 查询的执行计划