MongoDB 中的通配符搜索

Abh*_*eet 5 javascript arrays json mongodb node.js

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

{"path":"foo/bar/{id}/somethingelse"}
Run Code Online (Sandbox Code Playgroud)

或者

{"path":"foo/bar/*/somethingelse"}
Run Code Online (Sandbox Code Playgroud)

因此,当出现类似这样的查找请求时,我想获取此文档:

db.collection.find({path:"foo/bar/1/somethingelse"})
Run Code Online (Sandbox Code Playgroud)

或者

db.collection.find({path:"foo/bar/2/somethingelse"})
Run Code Online (Sandbox Code Playgroud)

因此,如果文档有一些通配符,我想将它与匹配该模式的标准进行匹配。

Ian*_*her 2

对于这样的通配符,您可以使用正则表达式,如下所示:

db.collection.find({"path": new RegExp("foo/bar/.*?/somethingelse")})
Run Code Online (Sandbox Code Playgroud)

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

path = path.replace(/foo\/bar\/(.*)\/somethingelse/, 'foo/bar/{id}/somethingelse')
db.collection.find({path:path})
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


根据评论进行编辑

要进行反向通配符匹配,应执行以下操作,返回请求的文档和任何匹配的通配符。您需要定义每个实际通配符的含义才能使其发挥作用。

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