2016-08-16 1 views
1

내 노드 서버 (mongoosoe 사용)에서 mongodb 컬렉션에 $ group 및 $ sum을 수행하려는 경우 기존 그룹이 아닌 경우 0을 반환 할 수 있습니까? 컬렉션의 필드는 ssn, name, gender, city입니다.

{ 
"_id" : { 
    "city" : "NY", 
    "gender" : "male" 
}, 
"count" : 11 
}, 
{ 
"_id" : { 
    "city" : "NY", 
    "gender" : "female" 
}, 
"count" : 31 
} 

을하지만, 하나의 성별의 사람들이 도시에 존재하지 않는 경우 - 값이 반환되지 않습니다 : -

 model.aggregate([ 
     { 
      $group : { _id : { city:"$city", gender:"$gender"}, count{ $sum:1 }} 
     }], function (err,result) { 
       if(err) { 
        //err 
       } 
       else{ 
        //response 
       } 
     }); 

도시 남녀의 사람들이있는 경우 쿼리가 반환됩니다.

{ 
"_id" : { 
    "city" : "LA", 
    "gender" : "female" 
}, 
"count" : 53 
} 

는 쿼리가 도시 인구 수량과 모음을하지 않고 주어진 시나리오에 다음과 같은 결과를 반환 할 수 있습니다 : LA에서 어떤 남성은 예를 들면? 가능한 값은 유한하고 예에서와 같이 알려진 경우이 같은 도시 당 하나 개의 문서로 남성과 여성의 수를 결합하는 $ 콘드를 사용할 수

{ 
"_id" : { 
    "city" : "LA", 
    "gender" : "male" 
}, 
"count" : 0 
},  
{ 
"_id" : { 
    "city" : "LA", 
    "gender" : "female" 
}, 
"count" : 53 
} 

덕분에,

답변

1

:

[ 
    { 
     $group : { 
      _id: { 
       city:"$city" 
      }, 
      males:{ 
       $sum: { 
        $cond: {if: {$eq:["$gender", "male"]}, then: 1, else: 0} 
       } 
      }, 
      females:{ 
       $sum: { 
        $cond: {if: {$eq:["$gender", "female"]}, then: 1, else: 0} 
       } 
      } 
     } 
    } 
] 
+0

감사합니다. 내일 다시 시도하고보고 할 것입니다. – Medvednic

관련 문제