【问题标题】:Search string and return matching substring MongoDB搜索字符串并返回匹配的子字符串 MongoDB
【发布时间】:2020-08-13 13:06:59
【问题描述】:

我正在开发一个使用数据库 MongoDB 的 golang 项目。我有一个包含以下记录的集合:

[
    {
        "_id": 1,
        "vals": [
            "110",
            "2211"
        ]
    },
    {
        "_id": 1,
        "vals": [
            "Abcd",
            "102"
        ]
    }
]

我想执行一个搜索,比如如果我通过“11001”,那么第一条记录将返回。但我还没有找到任何解决方案来做同样的事情。我尝试了以下查询:

db.getCollection('ColName').find({"vals":{"$regex": "^11001", "$options": "i"}})

保存在 db 中的字符比我在搜索中传递的要少。如果我通过“110”或“11”,那么它会给出结果,但我的要求不同,我有完整的字符串,需要匹配 2,3 或 4 个字符。

【问题讨论】:

  • ^11((0)?0)?$^(11|110|1100)$ 或三个单独的 find 语句(没有正则表达式)将匹配 111101100,但不匹配 111、@ 987654330@
  • 搜索字符串11001显然应该被截断为1100并转换为一个正则表达式或三个子字符串111101100如果不需要匹配5个符号跨度>
  • @bartolo-otrit 感谢您的建议。现在我已经将字符串分成 11、110、1100 并与 in 运算符匹配。

标签: mongodb-query


【解决方案1】:

这是关于正则表达式的。

db.getCollection('ColName').find({"vals":{"$regex": "^110(01)?", "$options": "i"}})

会为你工作。 “?”在正则表达式中表示匹配 0 或 1。

【讨论】:

  • 这对我不起作用。因为我必须在查询中传递完整的字符串并且只匹配前 2,3 或 4 个字符。
猜你喜欢
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 2019-09-03
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多