0

我有一个看起来像这样的集合:

{ "_id" : ObjectId("51745ec04fdde5d77e4c5ed3"), "pattern" : "^a$" }
{ "_id" : ObjectId("51745ecb4fdde5d77e4c5ed4"), "pattern" : "^b$" }
{ "_id" : ObjectId("51745ece4fdde5d77e4c5ed5"), "pattern" : "^c$" }

我基本上想看看单个输入值是否与集合中定义的任何正则表达式匹配。我对 map/reduce 功能有些陌生,但我会像这样用 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 方案,以查明输入值是否与集合中的任何正则表达式匹配?

4

1 回答 1

1

我不确定你为什么需要 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
>
于 2013-04-23T04:19:08.133 回答