You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB 3.6.5+mongodb-rest实现Like查询的REST请求转换问题

解决mongodb-rest中MongoDB正则查询转REST请求的问题

嘿,我刚好熟悉mongodb-rest的用法,来帮你搞定这个模糊查询转REST请求的问题!

你在Mongo命令行里用的db.collection.find({"name" : /Smith/})是MongoDB的正则字面量语法,但这种写法没法直接放到HTTP请求里——因为JSON格式不支持原生的正则字面量,而mongodb-rest是基于JSON来处理查询参数的。不过别担心,我们可以用MongoDB的$regex操作符来替代,这样就能顺利传递查询条件了。

具体实现方式

1. 转换查询条件格式

把原来的正则字面量/Smith/转换成JSON格式的$regex表达式:

{"name": {"$regex": "Smith"}}

如果需要大小写不敏感的查询,可以加上$options参数:

{"name": {"$regex": "smith", "$options": "i"}}

2. 通过GET请求发送查询

如果想用GET请求,需要把上面的JSON字符串进行URL编码(因为URL里不能直接包含{、"这类特殊字符),然后作为query参数传递。

举个例子,编码后的查询参数会变成:
%7B%22name%22%3A%7B%22%24regex%22%3A%22Smith%22%7D%7D

最终的GET请求URL大概是这样:

GET http://your-server:port/your-collection?query=%7B%22name%22%3A%7B%22%24regex%22%3A%22Smith%22%7D%7D

用curl命令测试的话:

curl "http://your-server:port/your-collection?query=%7B%22name%22%3A%7B%22%24regex%22%3A%22Smith%22%7D%7D"

3. 通过POST请求发送查询(更推荐)

POST请求不需要URL编码,直接把查询JSON放在请求body里,更直观也不容易出错。

根据mongodb-rest的规则,通常可以把查询放在query字段里,请求示例如下:

请求方法:POST
请求路径:http://your-server:port/your-collection/find
请求头:Content-Type: application/json
请求body:

{"query": {"name": {"$regex": "Smith"}}}

用curl命令测试:

curl -X POST http://your-server:port/your-collection/find \
  -H "Content-Type: application/json" \
  -d '{"query": {"name": {"$regex": "Smith"}}}'

为什么不能直接用/Smith/?

因为JSON数据格式不支持像MongoDB shell那样的正则字面量语法,必须用MongoDB官方定义的$regex操作符来表示正则查询,这样mongodb-rest才能正确解析并转换成MongoDB能识别的查询条件。

内容的提问来源于stack exchange,提问作者Spindoctor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:44:42