2017-10-17 4 views
0

조건부를 통과하지 못했기 때문에 그룹화되지 않은 문서가 포함될 mongoDB 그룹을 만들기 위해 구문을 이해하려고 시도했습니다.아직 그룹화되지 않은 경우 MongoDb 그룹

문서가

{ 
"_id" : ObjectId("value"), 
"updatedAt" : ISODate("value"), 
"zip" : "11209", 
"state" : "NY", 
"city" : "New York", 
} 

같은 부분에 보이는 내가

east_ny_zipcodes = ["11209", "11210", "11211", ...] 
lower_ny_zipcodes = ["11212", "11213", "11214", ...] 

처럼, 다른 그룹을 일치하는 상호 배타적 인 문자열 배열을 만들어이 @Neal 룬에 들어있는 예제 쿼리는 어떤 정의 된 그룹으로하며 값

db.zips.aggregate([ 
    { "$group": { 
    "_id": null, 
    "lower_ny": { 
     "$sum": { 
     "$cond": [{ "$in": [ "$zip", lower_ny_zipcodes ] },1,0] 
     } 
    }, 
    "east_ny": { 
     "$sum": { 
     "$cond": [{ "$in": [ "$zip", east_ny_zipcodes ] },1,0] 
     } 
    }, 
    "upper_ny": { 
     "$sum": { 
     "$cond": [{ "$in": [ "$zip", upper_ny_zipcodes ] },1,0] 
     } 
    } 
    }} 
]) 

다른 모든 그룹을 캐치하려고합니다. 모자는 이러한 정의 된 그룹은하지 않았다 모두를 잡을뿐만 아니라, 나에게 문서를 포기하지 만, 나는 그것으로 드릴 다운 할 수 있도록 코드를 아래에 시도 할 수 있습니다

"other_zips":{ 
    "$push":{ 
    "$cond": [{ "$nin": [ "$zip", lower_ny, east_ny, upper_ny,...]}] 
} 
+1

당신이 전체 문서의 예를 추가 할 수 있습니다, 그래서 우리는 당신의 생각의 강을 따라 할 수 있다면 그것은 실제로는 매우 도움이 될 것입니다. 그렇지 않으면 lower_ny_zipcodes 등의 출처가 명확하지 않습니다. –

+0

감사합니다 @AlexP. lower_ny_zipcodes에 사용한 값의 예를 추가했습니다. –

답변

1

과 같이 계산한다.

all - 변수 모든 우편 번호

$$ROOT 채 - 다른 찾을 수없는 경우 전체 문서 것은

아래 코드는 문서 전체를 밀어 버린다는 널 (null) 요소를 삽입합니다.

선택한 경우 다음 단계에서 널 문서를 필터링 할 수 있습니다.

$addToSet은 하나의 null 문서를 유지합니다.

문서 :

"other_zips_doc":{ 
    "$addToSet":{ 
    "$cond": [{ $not: [ { $in: [ "$zip", all ] } ] }, "$$ROOT", null] 
    } 
} 

수 :

"other_zips_count":{ 
    "$sum":{ 
    "$cond": [{ $not: [ { $in: [ "$zip", all ] } ] }, 1, 0] 
    } 
} 
관련 문제