我想使用标准的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" }
但没有运气。有人可以帮忙吗?我只需要做查找,理想情况下不想再运行另一个界面。
答案 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
我知道你不想使用其他界面,但有时它确实是最好的事情。