4

我正在尝试使用查询过滤 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 可以使用查询。有任何想法吗 ?

4

1 回答 1

6

您需要将outquery选项组合成一个对象:

res = db.movies.mapReduce(m,r, {out: { inline : 1}, query: {kinds: 'Action'} });
于 2012-11-11T17:48:23.763 回答