我有一个看起来像这样的集合:
{ "_id" : ObjectId("51745ec04fdde5d77e4c5ed3"), "pattern" : "^a$" }
{ "_id" : ObjectId("51745ecb4fdde5d77e4c5ed4"), "pattern" : "^b$" }
{ "_id" : ObjectId("51745ece4fdde5d77e4c5ed5"), "pattern" : "^c$" }
我基本上想看看一个输入值是否与集合中定义的任何正则表达式匹配。我对映射/减少功能有点陌生,但我将在JavaScript中连续编写此功能,如下所示:
function matches(input, collection) {
for (var i = 0; i < collection; i++) {
if (input.match(collection[i].pattern))
return true;
}
return false;
}
如果我并行地写这个,它可以归结为:
function matches(input, item) {
return input.match(item.pattern);
}
然后将其减小以查看true
是否存在于结果数组中。
我如何将此写为MongoDB的map/reduce方案,以找出输入值是否与集合中的任何正则表达式匹配?
我不知道为什么这里需要map/reduce。似乎你可以做一个简单的迭代类似于这样(在mongo shell):
> var input="a";
> db.collection.find({},{_id:0,pattern:1}).forEach(function(d) {
if ( input.match(d["pattern"]))
print (tojson(d)+" matches");
} )
{ "pattern" : "^a$" } matches
>