db.foo.-6ren">
gpt4 book ai didi

regex - MongoDB正则表达式匹配问题

转载 作者:IT老高 更新时间:2023-10-28 13:21:09 30 4
gpt4 key购买 nike

这是我的 MongoDB shell session ;

> db.foo.save({path: 'a:b'})
WriteResult({ "nInserted" : 1 })

> db.foo.findOne()
{ "_id" : ObjectId("58fedc47622e89329d123ee8"), "path" : "a:b" }

> db.foo.save({path: 'a:b:c'})
WriteResult({ "nInserted" : 1 })

> db.foo.find({path: /a:[^:]+/})
{ "_id" : ObjectId("58fedc47622e89329d123ee8"), "path" : "a:b" }
{ "_id" : ObjectId("58fedc57622e89329d123ee9"), "path" : "a:b:c" }

> db.foo.find({path: /a:[a-z]+/})
{ "_id" : ObjectId("58fedc47622e89329d123ee8"), "path" : "a:b" }
{ "_id" : ObjectId("58fedc57622e89329d123ee9"), "path" : "a:b:c" }

显然正则表达式 /a:[^:]+//a:[a-z]+/ 不应该匹配字符串 'a:b :c',但看起来 Mongo 在这个正则表达式上失败了,有人知道这里发生了什么吗?

已提交给 MongoDB Jira,as a bug ticket ,那么它是MongoDB查询结构中的一个错误吗?

最佳答案

问题在于部分匹配,因为您没有限制整个单词的正则表达式,存在于 a:b:c 中的部分匹配即 a:b 导致您获得该文档。

将以下正则表达式与 ^$ 结合使用,作为 anchor 来表示单词的开头和结尾;

db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})

这将使正则表达式适用于整个字符串,并忽略上面解释的部分匹配。有关正则表达式 anchor 的更多信息,click here .

所以,总而言之,没有错误,只是对正则表达式的滥用。

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com