MongoDB를 중합
MongoDB의 중심에 (등 통계적 평균, 금액 등)의 데이터를 처리하기위한 중합 (집계)하고, 계산 된 데이터의 결과를 반환한다. 다소 유사한 SQL 문 수 (*).
총 () 메소드
MongoDB의 중합 방법은, 골재를 사용한다 ().
문법
다음과 같이 기본 구문 집계 () 메소드는 다음과 같습니다
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
예
다음과 같이 데이터 수집은 다음과 같습니다
{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'w3cschool.cc', url: 'http://www.w3cschool.cc', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'w3cschool.cc', url: 'http://www.w3cschool.cc', tags: ['mongodb', 'database', 'NoSQL'], likes: 10 }, { _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: ['neo4j', 'database', 'NoSQL'], likes: 750 },
이제 우리는 위에서 다음과 같이 계산 집합체 (하여 작성자)에 의해 작성된 문서의 수를 각각 계산 설정 :
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) { "result" : [ { "_id" : "w3cschool.cc", "num_tutorial" : 2 }, { "_id" : "Neo4j", "num_tutorial" : 1 } ], "ok" : 1 } >
SQL 문 위의 유사 예 : 선택 by_user는, COUNT (*) by_user에 의해 mycol 그룹에서
위의 예에서는 그룹 필드가 데이터 필드 및 필드 by_user by_user 동일한 값의 합을 산출한다.
다음 표는 일부 집계 식을 보여줍니다 :
식 | 기술 | 예 |
---|---|---|
$ 합 | 합계를 계산합니다. | db.mycol.aggregate ([{$ 그룹 : {_id : "$의 by_user", num_tutorial : {$ 합}} "$가 좋아"}]) |
$ 평균 | 평균 계산 | db.mycol.aggregate ([{$ 그룹 : {_id : "$의 by_user", num_tutorial : {$의 평균}} "$가 좋아"}]) |
$ 최소 | 모든 문서의 수집 가치가 최소 해당 가져옵니다. | db.mycol.aggregate ([{$ 그룹 : {_id : "$의 by_user", num_tutorial : {$ 분}} "$가 좋아"}]) |
$ 최대 | 최대 가치에 해당하는 모든 문서의 컬렉션을 가져옵니다. | db.mycol.aggregate ([{$ 그룹 : {_id : "$의 by_user", num_tutorial : {$ 최대}} "$가 좋아"}]) |
$ 푸시 | 결과 문서에서 배열에 값을 삽입합니다. | db.mycol.aggregate ([{$ 그룹 : {_id : "$의 by_user", URL : {$ 푸시 : "$ URL이"}}}]) |
$ AddToSet | 결과 문서에서 배열에 값을 삽입하지만, 복사본을 생성하지 않습니다. | db.mycol.aggregate ([{$ 그룹 : {_id : "$의 by_user", URL : {$ addToSet : "$ URL이"}}}]) |
$ 먼저 | 정렬 자원 문서에 따른 제 문서 데이터된다. | db.mycol.aggregate ([{$ 그룹 : {_id : "$의 by_user", first_url : {$ 첫째 : "$ URL이"}}}]) |
$ 마지막 | 정렬 자원 문서에 따르면 지난 문서 데이터를 가져옵니다 | db.mycol.aggregate ([{$ 그룹 : {_id : "$의 by_user", last_url : {$ 마지막 : "$ URL이"}}}]) |
파이프 라인의 개념
일반적으로 유닉스와 리눅스에서 파이프는 다음 명령에 대한 매개 변수로 출력 전류 명령을 사용합니다.
다음 파이프 라인 처리에 대한 처리 결과 후 파이프에서 MongoDB를 MongoDB를 문서 폴리머 파이프. 파이프 라인 동작이 반복 될 수있다.
식 : 처리 입력 및 출력 문서. 표현식은 무 만 총 문서의 현재의 파이프 라인을 계산하는 데 사용될 수 있으며, 다른 문서를 처리 할 수 없습니다.
여기에서 우리는 일반적으로 여러 가지 작업에 사용되는 통합 프레임 워크를 소개합니다 :
- $ 프로젝트 : 입력 문서의 구조를 수정합니다. 이름을 바꾸 필드를 추가하거나 제거 할 수 있습니다, 또한 중첩 된 계산 및 문서를 만드는 데 사용할 수 있습니다.
- $ 대전 : 데이터 규정 문서의 출력을 필터링하는 데 사용된다. MongoDB를 표준 쿼리 연산자를 사용하여 $ 일치.
- $ 한도 : MongoDB를 중합 파이프 리턴 된 문서의 수를 제한한다.
- $ 건너 뛰기 : 중합 파이프 라인에서 문서의 지정된 번호를 생략하고, 문서의 나머지 부분을 반환합니다.
- 긴장을 풀고 $ : 문서에 여러 타입 필드의 배열을 분할하는 값을 포함하는 각 배열.
- $ 그룹 : 통계 결과에 사용될 수 그룹화 문서 컬렉션.
- $ 분류 : 주문 후 입력 문서 출력.
- $ GeoNear는 : 지리적 위치에 가까운 문서 출력을 명령했다.
파이프 라인 연산자로서는
1, $ 프로젝트 예
db.article.aggregate( { $project : { title : 1 , author : 1 , }} );
이 될 수 있다면 순서는 _ID 포함하지 않는 경우이 경우 것이라고 만이 결과는 _id, tilte 세 분야의 저자, 기본 _id 필드는이 포함되어야합니다 :
db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 }});
2. $ 매치 예
db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );
$ 대전 70보다 큰 점수 처리 파이프 라인 연산자 $ 그룹의 다음 단계보다 작거나 90 기록 정합 레코드 같다 얻기 위해 사용된다.
3. $ 인스턴스를 건너
db.article.aggregate( { $skip : 5 });
달러 (A $) 스킵 처리 파이프 라인 연산자 후, 처음 다섯 개의 문서를 밖으로 "여과"입니다.