在mongo自己的http rest接口上传递正则表达式查询的语法

时间:2012-01-30 14:48:36

标签: rest mongodb

我想使用标准的MongoDB ReST接口(http://www.mongodb.org/display/DOCS/Http+Interface)来搜索并返回某个字段上带有通配符匹配的记录 - 在这种情况下为“link_url”。例如,传递'acko'以匹配www.stackoverflow.com等。

如果我想要完全匹配,我会使用

http://127.0.0.1:28017/databaseName/collectionName/?filter_link_url=value

但我想通过正则表达式来允许部分匹配

我尝试使用各种方式将上面的网址与其代码段相结合:

"match" : { "$regex" : "foo", "$options" : "ig" }

但没有运气。有人可以帮忙吗?我只需要做查找,理想情况下不想再运行另一个界面。

2 个答案:

答案 0 :(得分:4)

我知道这与你的问题本身无关,但我在mongolab上试过这个,这对我有用:

https://api.mongolab.com/api/1/databases/myDBName/collections/categories/?apiKey=myAPIKey&q={"keyname":{"$regex":"^Kampanje$","$options":"i"}}

这会发现所有名为“Kampanje”的关键字不敏感。请注意,URL不能包含空格。

答案 1 :(得分:-1)

看起来REST接口(可能是安全的)会自动转义通过的字段,并且嵌入式查询是不可能的。这意味着两种传递所需URL格式的方法似乎都被排除在外。例如:

db.collection.find({"url" : /acko.*/i})

理论上,这将转化为:

http://127.0.0.1:28017/databaseName/collectionName/$cmd/?filter_url=/acko.*/i

不幸的是,实际上它被传递为(注意引号):

{ "url" : "/acko.*/i" }

另一种形式存在类似问题,您将$ regex命令作为嵌入文档传递。这个以及其他问题是内置REST接口不是针对mongoDB运行查询的推荐解决方案的原因。相反,您应该查看Sleepy Mongoose)或node.js

我知道你不想使用其他界面,但有时它确实是最好的事情。