我有一些 mongodb 文档,如下所示:
{
...
ipAddress: "1.2.3.4"
},
{
...
ipAddress: "1.2.3.44,1.2.5.7"
}
ipAddress 是一个字符串字段,可以包含许多用逗号分隔的 IP。 (“1.2.3.4,1.3.5.7,2.4.6.8”
等)
我想检索与特定 IP 匹配的 mongo 文档。为此,我尝试以下查询:
collection.findOne({
ipAddress: new RegExp (<<the_ip>>)
});
但是,在调试我的应用程序时,我意识到上述查询匹配并找到任何具有 the_ip
的内容,而不仅仅是确切的 the_ip
例如。 如果我有两个 IP 分别为 1.2.2.2 和 1.2.2.22 的文档,并且我搜索正则表达式 1.2.2.2,我注意到它总是匹配并返回 1.2.2.22。我觉得这是预料之中的,因为从技术上讲,正则表达式正在完成它的工作。
但这并不是我们想要的结果。如何进行完整的精确 IP 匹配?
谢谢。
最佳答案
我认为你需要做两件事:
- 向 IP 地址添加分隔符
- 地址中的转义点
对于(1)做:
(^|,)<<the_ip>>(,|$)
这要求 IP 前面是字符串开头的 (^
) 断言或逗号,并且 IP 后面是逗号或 ($
) 字符串末尾的断言。
对于 (2),用 IP 字符串中的 \.
替换点。
"1.2.3.4".replace(/\./g, "\\.")
正则表达式中的点表示“除换行之外的任何字符”,因此如果不替换它,可能会意外匹配一些无效字符串(例如1a1a1a1
)。
关于javascript - Mongodb 字符串匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48947975/