2012-10-29 5 views
2

mongodb 집계 프레임 워크 파이프 라인이 어떻게 작동하는지에 대한 근본적인 오해가있을 수 있습니다. 내 기대는 각 단계가 이전 단계의 결과를 소비한다는 것입니다.mongodb 집계 프레임 워크 파이프 라인은 어떻게 작동합니까?

> db.zipcodes.aggregate({$match:{state:"CA"}}); 

는 이와 같은 결과를 얻게 http://media.mongodb.org/zips.json 여기에 제공된 샘플 수집을 이용한 구체 예이다.

{ 
     "city" : "TRUCKEE", 
     "loc" : [ 
      -120.295031, 
      39.319321 
     ], 
     "pop" : 199, 
     "state" : "CA", 
     "_id" : "96162" 
    } 

지금까지는 그렇게 좋았습니다.

> db.zipcodes.aggregate({ 
    $match:{state:"CA"}, 
    $project: {city: 1, pop: 1, state: 1} 
}); 

투사 작동하지만 첫 번째 $ 일치하는 단계를 무시 : 그럼 실행하여, 위의 투영을 얻기 위해 또 다른 단계를 추가하기로 결정. 그것은 원래의 입력에 따라, 문서를 포함하는 상태 = CA에서!

{ 
     "city" : "THAYNE", 
     "pop" : 505, 
     "state" : "WY", 
     "_id" : "83127" 
    } 

내 기대 잘못인가, 아니면 내가 그것을 보지 않고 구문 문제를 쳐다보고있다?

> db.version(); 
2.2.0 

exemple 쿼리가 제대로 작동 : 나는 버전 2.2.0을 실행하고 있습니다.

미리 감사드립니다.

답변

4

그것은 구문 문제, 당신은 일을하는지 :

db.zips.aggregate({$match:{state:"CA"}, $project: {city: 1, pop: 1, state: 1}}) 

을 ... 두 필드, $ 일치와 $ 프로젝트와 같은 문서에. 당신이 파이프 라인 단계에서 여러 필드를 넣으면

db.zips.aggregate({$match:{state:"CA"}}, {$project: {city: 1, pop: 1, state: 1}}) 

은 분명히, MongoDB를가 마지막 하나를 사용하여 집계 명령은 파이프 라인의 단계를 설명하는 별개의 일련의 문서를합니다. 다음 개발 지점에서 수정 된 버그입니다 : https://jira.mongodb.org/browse/SERVER-6861

+0

잡아 주셔서 감사합니다! – jbelis

관련 문제