【问题标题】:$regex to find a document in mongodb that contains a string$regex 在 mongodb 中查找包含字符串的文档
【发布时间】:2015-04-25 11:20:02
【问题描述】:

我正在mongo 中进行数据库查询,我需要通过常规表达string 字段(fieldToQuery)来查询文档。

数据结构就像

{
     fieldToQuery : "4052577300",
     someOtherField : "some value",
     ...
     ...
}

我有 "804052577300" 这样的值,我必须使用它来查询上述文档。

如何使用 $regex 操作符来达到同样的效果?

更新:

我需要以regex in mongo 结尾。

【问题讨论】:

    标签: regex mongodb mongodb-query


    【解决方案1】:

    您可以执行一种反向正则表达式查询,使用fieldToQuery 值创建一个正则表达式,然后针对您的查询值进行测试:

    var value = "804052577300";        
    db.test.find({
        $where: "new RegExp(this.fieldToQuery + '$').test('" + value + "');" 
    });
    

    $where 运算符允许您对集合中的每个文档执行任意 JavaScript;其中this是当前文档,表达式的真实结果决定了该文档是否应该包含在结果集中。

    因此,在这种情况下,将为每个文档的 fieldToQuery 字段构建一个新的 RegExp,并在末尾添加一个 $,以将搜索锚定到字符串的末尾。然后调用正则表达式的test 方法来测试value 字符串是否与正则表达式匹配。

    $where 字符串是在服务器端评估的,因此value 的值必须通过直接将其值包含到$where 字符串中来在客户端评估。

    请注意,$where 查询可能会很慢,因为它们不能使用索引。

    【讨论】:

    • 感谢您为此付出的努力,一定会试一试并通知您。如果您能给出简短的解释,那就太好了。 更新:美丽,像魅力一样工作。
    • 直到我理解了“新正则表达式”,我发现我们可以通过查看您的“this.fieldToQuery”直接使用该字段,但之后就有点混乱了。
    • @Beast 没问题,我加了一些解释;希望对您有所帮助。
    • 真的很有帮助,谢谢伙计:)
    【解决方案2】:

    你可以这样做:

    db.collection.find({ fieldToQuery: /4052577300$/})
    

    上面的正则表达式模式等价于SQL的LIKE操作:

    select * from table where fieldToQuery like '%4052577300' => will return the document with the value "804052577300"
    

    【讨论】:

    • 我所说的值将是动态序列,前缀为fieldToQuery中的数字。所以我可能有 "804052577300""8804052577300"
    猜你喜欢
    • 2019-11-25
    • 2023-03-21
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多