无法在mongodb mapReduce命令中设置查询过滤器

时间:2012-11-11 17:43:25

标签: mongodb mapreduce

我正在尝试使用查询过滤mapReduce命令。 mapReduce命令似乎没有使用此查询。当我使用具有相同参数的runCommand时,将使用查询过滤器。我尝试使用mongodb 2.2.1和2.0.1。

我的mapReduce函数的查询未被使用。

m = function () {
    if (this.duration > 0) {
    emit("dur", this.duration);
  }
}

r = function (key, values) {
    var index = 0;
    var sum = 0;
    for (var i = 0; i < values.length; i++) {
        sum += values[i];
        index++;
    }
    return sum / index;
}

此命令不起作用:

res = db.movies.mapReduce(m,r, {out: { inline : 1}},{query:{kinds:'Action'}});

{
    "results" : [
            {
                    "_id" : "dur",
                    "value" : 5148.227224559308
            }
    ],
    "timeMillis" : 1849,
    "counts" : {
            "input" : 105472,
            "emit" : 69602,
            "reduce" : 106,
            "output" : 1
    },
    "ok" : 1,
}

此命令有效:

res = db.runCommand({mapReduce : "movies", map : m, reduce : r, query : {kinds:'Action'}, out : {inline:1} })

{
    "results" : [
            {
                    "_id" : "dur",
                    "value" : 6134.118191572414
            }
    ],
    "timeMillis" : 238,
    "counts" : {
            "input" : 3577,
            "emit" : 2910,
            "reduce" : 4,
            "output" : 1
    },
    "ok" : 1
}

使用runCommand使用查询。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

您需要将outquery选项合并到一个对象中:

res = db.movies.mapReduce(m,r, {out: { inline : 1}, query: {kinds: 'Action'} });