2011-09-15 2 views
3

여기에서 내가 뭘 잘못하고 있는지 알 수 없습니다. 나는 코드를 (문서의 모든 속성에 직접 액세스 할 수 있습니다 감소/pymongo을 사용하지 않고 다음과 같은지도가있어 -하여 예에는 내장 부품 관련 여기 :pymongo 사용자 어설 션 : 13606 : 'out'은 문자열 또는 객체 여야합니다.

() 파일 getTableMap.js에 :

function() { 
    var tablePoints1 = 0; 
    var tablePoints2 = 0; 
    if (this.pointsTeam1 == this.pointsTeam2) { 
    tablePoints1 = 1; 
    tablePoints2 = 1; 
    } 
    else { 
    if (this.pointsTeam1 > this.pointsTeam2) { 
     tablePoints1 = 3; 
    } 
    else { 
     tablePoints2 = 3; 
    } 
    } 
    emit(this.idTeam1, [tablePoints1, this.pointsTeam1, this.pointsTeam2]); 
    emit(this.idTeam2, [tablePoints2, this.pointsTeam2, this.pointsTeam1]); 
} 

map_reduce를 호출하는 파이썬 코드는 다음과 같습니다 http://api.mongodb.org/python/current/examples/map_reduce.htmlMap Reduce example from pymongo 2.0.1 documentation

: 파이썬 코드
def getTableOnMatchday(self): 
    m = Code(open('getTableMap.js','r').read()) 
    r = Code("""function(k,values) { 
    var foo = 'foo'; 
    return(foo); 
    }""") 

    result = bl_1.map_reduce(m, r, "myresult") 
    for doc in result.find(): 
    print doc 

내가 바로 문서에서 간단한 예를 적응 내가 코드를 실행했을 때 얻을

파이썬 역 추적은 다음과 같습니다

>>> api.getTableOnMatchday() 
    Traceback (most recent call last): 
    pymongo.errors.OperationFailure: command SON([('mapreduce', u'bl1_2011'), 
    ... 
    ... 
    ... 
) failed: db assertion failure 

그건 정확히 너무 많이 말하지 않았다 내가 로그에이 자세한에의 mongod 로깅을 설정하고 발견

Thu Sep 15 21:04:02 [conn7] User Assertion: 13606:'out' has to be a string 
or an object 

실제로 map_reduce 호출을 생성하는 Python 코드를 보면 세 번째 매개 변수 ('out'은 pymongo 2.0.1 문서에 따라)는 'myresult'입니다. 이것은 확실히 문자열입니다.

여기에 대해 불평하는 pymongo 란 무엇입니까? Javascript는 문법적으로 정확합니다 (제 생각 엔). 줄이기는 현재 아무 것도하지 않지만이 명령으로 서버 측 컴파일을 막지 않아야합니다. 아니면 어쩌면 가능합니까?

답변

6

은 내가 더 시행 착오를 통해와 PHP 드라이버 설명서를 읽기를 통해 답을 찾은 것 같아 :

result = bl_1.map_reduce(m, r, out="foo") 

당신은 실제로 세 번째 매개 변수 = 문자열을 지정해야합니다.

가 할 말한대로 문서의 예는 타락 여기 리드

:

result = bl_1.map_reduce(m, r, "foo") 
0

맵리 듀스 출력 옵션 : 사전 V1.8을 : 당신이 다음 결과 것 밖으로에 대한 값을 지정하지 않는 경우 명령의 출력에 이름이 주어진 임시 컬렉션에 저장됩니다 (아래 참조). 그렇지 않으면 out 옵션에 대한 콜렉션의 이름을 지정할 수 있으며 결과는 그곳에 배치됩니다.

v1.8 + : 출력 옵션이 변경되었습니다. Map-reduce는 더 이상 임시 콜렉션을 생성하지 않습니다 (따라서 keepTemp가 제거되었습니다).

자세한 내용은 here