2014-06-21 4 views
2

는이 문서의 집합 다음 사항을 고려 :MongoDB의 쿼리 그룹과 별개 함께

[ 
    { 
    "name" : "nameA", 
    "class" : "classA", 
    "age" : 24, 
    "marks" : 45 
    }, 
    { 
    "name" : "nameB", 
    "class" : "classB", 
    "age" : 22, 
    "marks" : 65 
    }, 
    { 
    "name" : "nameC", 
    "class" : "classA", 
    "age" : 14, 
    "marks" : 55 
    } 
] 

나는 최소 및 최대 값 나이와 마크뿐만 아니라 이름과 클래스의 고유 한 값을 가져올 필요가있다.

나는 aggregate와 group을 사용하여 하나의 쿼리로 나이와 마크의 최대 값과 최소값을 구할 수 있다는 것을 알고 있으며 고유 쿼리를 사용하여 이름과 클래스의 고유 값을 얻을 수 있습니다.

하지만 정보를 가져 오기 위해 별도의 쿼리를 수행하고 싶지 않습니다. 하나의 쿼리로 결과를 얻을 수있는 방법이 있습니까? 어쨌든 집합과 별개를 병합 할 수 있다고 가정 해 봅시다.

답변

2

물론 하나의 집계 명령으로 처리 할 수 ​​있습니다. 당신은 $addToSet 연산자 $group를 사용해야합니다 :

db.collection.aggregate([{ 
    $group : { 
     _id : null, 
     name : { $addToSet : "$name" }, 
     class : { $addToSet : "$class" }, 
     ageMin : { $min : "$age" }, 
     ageMax : { $max : "$age" }, 
     marksMin : { $min : "$marks" }, 
     marksMax : { $max : "$marks" } 
    } 
}]); 

$addToSet 선택한 필드의 고유 값으로 배열을 생성합니다.

{ 
    "_id" : null, 
    "name" : [ 
     "nameC", 
     "nameB", 
     "nameA" 
    ], 
    "class" : [ 
     "classB", 
     "classA" 
    ], 
    "ageMin" : 14, 
    "ageMax" : 24, 
    "marksMin" : 45, 
    "marksMax" : 65 
} 
:

이 집계는 예를 들어, 문서에 대한 다음과 같은 응답을 반환합니다