2012-10-14 5 views
3

그렇게

db.collection.aggregate([ 
    { $group: { _id: '$_id.element_id', total: { $sum: '$value.count' } } } 
]) 

처럼, 우리가 수집

{ 
    _id: { 
     element_id: '12345', 
     name: 'foobar' 
    }, 
    value: { 
     count: 1 
    } 
} 

나는 $group을 수행 할 통합 프레임 워크를 사용하고이 같은 문서가 있다고 가정 그리고 있어요 결과 :

{ "result" : [ { "_id" : null, "total" : 1 } ], "ok" : 1 } 

_id 필드가 null입니다. 실험에서 $ group이 _id (예 : $_id.element_id)에 대해 중첩 된 필드 선언을 허용하지 않는 것으로 보입니다.

왜 이런가요? 그리고 그것에 대한 해결 방법이 있습니까?

감사합니다.

+0

정확하게 표시해야 할 결과는 무엇입니까? $ _id에 있어야 할 것. {$ group : {_id : '$ _id', total : ... –

+0

죄송합니다. 세부 사항을 추가했습니다. 나는 또한 스스로 게시 할 답변을 찾았습니다. 그러나 추가 할 것이 있으면 주저하지 마십시오. – airportyh

답변

10

$project을 사용하여 문제를 해결했습니다.

db.collection.aggregate([ 
    { $project: { element_id: '$_id.element_id', count: '$value.count' } }, 
    { $group: { _id: '$element_id', total: { $sum: '$count' } } } 
]) 

$ 프로젝트는 이름을 변경 추가하거나 필드를 제거하여 문서 스트림을 고쳐.

http://docs.mongodb.org/manual/reference/aggregation/#_S_project

3

이 밝혀 것은 문제 SERVER-7491 된 것으로. 2.2.2에서 수정 된 것으로 보입니다 (약 3 일 전에 출시 됨).

위에서 언급 한 해결 방법은 2.2.1에서 나에게 잘 맞았습니다. 참고로 _id : 0 인 $ 프로젝트에서 _id를 제외한 $ 프로젝트 해결 방법 (2.2.2 이전)을 사용하면 매우 이상하게 행동하는 것처럼 보이지 않으므로 일부 작업이 제대로 끝나고 일부 작업이 끝났습니다. _id 필드가 동일한 집계 내의 최종 결과에서 누락되었습니다.

관련 문제