MongoDB中的通配符搜索

Wildcard Search in MongoDB

本文关键字:搜索 通配符 MongoDB      更新时间:2023-09-26

有人可以帮助我在MongoDB中使用以下通配符搜索条件吗?文档:

{"path":"foo/bar/{id}/somethingelse"}

{"path":"foo/bar/*/somethingelse"}

我想要得到这个文档当一个查找请求来的时候像这样:

db.collection.find({path:"foo/bar/1/somethingelse"})

db.collection.find({path:"foo/bar/2/somethingelse"})

所以如果文档有一些通配符,我想要匹配它的一个匹配模式的标准

对于这样的通配符,您可以使用regex,它看起来像:

db.collection.find({"path": new RegExp("foo/bar/.*?/somethingelse")})

但是如果我正确理解你的问题,你有一个单个文档在你的集合与{"path":"foo/bar/{id}/somethingelse"}的路径,你想返回它,如果查询实际上是为db.collection.find({path:"foo/bar/1/somethingelse"})。要做到这一点,最好在搜索之前执行搜索替换以更改实际查询,如下所示。

path = path.replace(/foo'/bar'/(.*)'/somethingelse/, 'foo/bar/{id}/somethingelse')
db.collection.find({path:path})

希望这对你有帮助!


基于注释编辑

要进行反向通配符匹配,以下操作应该可以工作,返回所请求的文档和任何匹配的通配符。您需要定义每个实际的通配符是什么才能使其工作。

path.replace(/foo'/bar'/(.*)'/somethingelse/, 'foo/bar/($1|{id}|'*)/somethingelse')
db.collection.find({path: new RegExp(path)})