2012-11-11 3 views
2

쿼리와 함께 mapReduce 명령을 필터링하려고합니다. 이 쿼리는 mapReduce 명령에서 사용하지 않는 것 같습니다. runCommand를 동일한 매개 변수와 함께 사용하면 쿼리 필터가 사용됩니다. 나는 mongodb 2.2.1과 2.0.1을 사용했다.mongodb mapReduce 명령에서 쿼리 필터를 설정할 수 없습니다.

내 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

당신은 하나의 객체로 outquery 옵션을 결합해야합니다 :

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

감사합니다! 내 일요일을 구 했잖아! – nbulteau

관련 문제