Latest web development tutorials

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 $) 스킵 처리 파이프 라인 연산자 후, 처음 다섯 개의 문서를 밖으로 "여과"입니다.