2014-09-04 4 views
2

중첩 된 부울 값이있는 집계 집계를 계산하여 합산 해보고 싶습니다.중첩 된 부울이있는 mongo 집계

먼저 계산하는 등의 내 문서 ID가 (간단한 표현)처럼 보이는 :

aggregation query 
{'$match': {key: 'value'}}, 
{'$project': { 
      '_id': True, 
      'ack.isAck': {'$cond' : [ "$ack.isAck", 1, 0 ] } 
     } 
}, 
{'$group': { 
     '_id': { 
      'ack': '$ack', 
     }, 
     'count': {'$sum': 1} 
    } 
} 

처럼이 쿼리 나 3 개 문서 마녀를 반환

document 1 
{ 
    key : 'value' 
    ack: {isAck: True} 
    ... : ... 
} 
document 2 
{ 
    key : 'value' 
    ack: {isAck: True} 
    ... : ... 
} 

document 3 
{ 
    key : 'value' 
    ack: {isAck: True} 
    ... : ... 
} 

순간에 내 집계 쿼리가 보인다 내용은 다음과 같습니다.

{count: 3, 'ack': {isAck: True}} 

무엇이 잘못되었으며 어떻게 만회해야하는지 모릅니다. 전자 문서

{count: 3 'ack' : 2} 

감사합니다.

답변

0

귀하의 실수는 필드에 대한 올바른 변수를 지정하고 또한 밖으로 필드를 취소,하지만 당신은뿐만 아니라이 문제를 단순화 할 수 없습니다 :

db.collection.aggregate([ 
    { "$match": { "key": "value" } }, 
    { "$group": { 
     "_id": { "isAck": "$ack.isAck" }, 
     "count": { 
      "$sum": { 
       "$cond": [ "$ack.isAck", 1, 0 ] 
      } 
     } 
    }}, 
    { "$project": { 
     "_id": 0, 
     "ack": "$_id", 
     "count": 1 
    }} 
]) 

을 아니면 처리 할 수있는 경우에도 단지 마지막 프로젝트를 드롭 필드는 ack이 아닌 _id으로 최종 결과에 표시됩니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 isAck 키가 설정되지 않은 경우 결과 개수는 0으로 설정되고 {ok : 1.0, 'result': [{ 'count': 0, 'ack': { 'isAck': 없음 }}, { 'count': 2, 'ack': { 'isAck': True}}]} isAck 키가 설정되지 않은 경우 어떻게 처리 되나요? – utopman