이 기사에서는 mongodb에서 집계가 무엇인지, mongodb 집계 파이프 라인을 작성하는 방법을 살펴 봅니다. 실제 예제를 통해 MongoDB 집계를 학습하십시오. MongoDB에 경험이 있다고 가정합니다.
https://cloudnweb.dev/2019/11/learn-mongodb-aggregation-with-real-world-example/
시작 단계에서 mongodb를 사용하기 시작할 때. CRUD (Create Read Update and Delete) 작업을 수행하기 위해 mongodb에서 쿼리를 작성하는 경우가 많습니다.
그러나 응용 프로그램이 더 복잡해지면 응답으로 보내기 전에 데이터에 대해 여러 작업을 수행해야 할 수도 있습니다.
예를 들어, 각 사용자에 대한 작업을 표시해야 하는 분석 대시 보드를 작성한다고 가정하십시오. 여기서 서버는 각 사용자에 대한 모든 작업을 배열로 보내야 합니다.
우리의 데이터에서 이것을 달성하는 방법을 추측 할 수 있습니까?. 여기 Mongodb Aggregation의 역할이 있습니다.
또한 이것은 간단한 예 중 하나이며, 이것보다 훨씬 더 복잡 할 수 있습니다. mongodb이 집계 파이프 라인을 사용하여 이 문제를 어떻게 해결하는지 살펴 보겠습니다.
MongoDB 집계 파이프 라인
첫째, Mongodb 집계는 각 파이프 라인 단계에서 데이터를 처리하는 파이프 라인입니다. 각 스테이지는 스테이지의 다음 파이프 라인에 대한 입력으로 변환되는 출력을 반환합니다.
여기서 데이터는 각 파이프 라인에 전달되어 데이터를 필터링, 그룹화 및 정렬하고 결과를 반환합니다.
실제 응용 프로그램에서 널리 사용되는 집계 연산자를 살펴 보겠습니다.
다음은 mongodb 집계 파이프 라인을 구축하는 방법에 대한 예입니다.
pipeline = [
{ $match : { … },
{ $group : { … },
{ $sort : { … },
...
]
db.collectionName.aggregate(pipeline, options)
더 나아 가기 전에 기사와 함께 집계를 연습합니다. 이 사이트에서 샘플 데이터 세트를 가져올 수 있습니다.
일단 데이터를 다운로드하십시오. mongoimport 명령을 사용하여 데이터 세트를 mongodb로 가져올 수 있습니다.
mongoimport --db aggrsample --collection test --file sample.json --jsonArray
$match
match 연산자는 일치와 집계가 작동한다는 점을 제외하고 mongoDB의 find() 연산자와 유사합니다. 마찬가지로 파이프 라인 match 연산자는 조건을 만족하는 모든 문서를 일치 시킵니다.
위의 데이터 세트에서 MA가 상태 인 모든 문서를 일치 시키십시오.
db.test.aggregate([
{
$match: {
state: 'MA'
}
}
])
.pretty();
결과적으로 MA가 상태 인 모든 문서를 찾습니다. 출력은 다음과 같습니다
$group
이름에서 알 수 있듯이 특정 필드를 기준으로 문서를 그룹화 합니다. ID 또는 다른 필드 일 수 있습니다.
일치 명령 상단에서 도시별로 문서를 그룹화 하겠습니다.
db.test.aggregate([
{
$match: {
state: 'MA'
}
},
{
$group: {
_id: '$city'
}
}
]);
또한 다음과 같은 결과를 볼 수 있습니다.
문서의 모든 필드를 검색하려고 합니다. 그룹화 필드 만 반환하는 이유는 무엇입니까?
글쎄, 그 이유가 있습니다. _id 필드로 문서를 그룹화 하면 (_id 필드는 모든 그룹화 필드를 포함 할 수 있습니다).
그런 다음 그룹화 파이프 라인의 결과를 검색하기 위해 누산기 표현식을 제공해야 합니다.
인기 있는 누산기 표현은
여기에서는 그룹과 함께 푸시 표현식을 사용하는 방법을 볼 것입니다
db.test
.aggregate([
{
$match: {
state: 'MA'
}
},
{
$group: {
_id: '$city',
data: {
$push: '$$ROOT'
}
}
}
])
.pretty();
따라서 다음과 같은 문서를 반환합니다.
$project
때로는 문서의 모든 필드가 필요하지 않을 수도 있습니다. 프로젝트 연산자를 사용하여 문서에서 특정 필드 만 검색 할 수 있습니다.
db.test.aggregate([
{
$match: {
state: 'MA'
}
},
{
$group: {
_id: '$city',
data: {
$push: '$$ROOT'
}
}
},
{
$project: {
_id: 0,
'data.loc': 1
}
}
]).pretty();
또한 0 또는 1을 지정하여 특정 필드를 검색 할 수 있습니다. 기본적으로 _id가 검색됩니다. 이를 피하기 위해 _id를 0으로 지정할 수 있습니다.
$sort
무엇보다도 sort 연산자는 기본적으로 문서를 오름차순 또는 내림차순으로 정렬합니다.
db.test.aggregate([
{
$match: {
state: 'MA'
}
},
{
$sort: {
pop: 1
}
}
]);
주로 오름차순으로 필드 팝을 기준으로 문서를 정렬합니다 (오름차순이면 1, 내림차순이면 -1).
$limit
limit 연산자는 데이터베이스에서 검색된 문서 수를 제한합니다.
db.test.aggregate([
{
$match: {
state: 'MA'
}
},
{
$sort: {
pop: 1
}
},
{
$limit: 5
}
]);
따라서 위 쿼리는 데이터베이스에서 5 개의 문서 만 반환합니다.
$addFields
한편 때때로 집계 된 데이터를 포함 할 수 있는 사용자 정의 필드를 작성해야 합니다. $ addField 연산자를 사용하여 이를 달성 할 수 있습니다.
db.test.aggregate([
{
$match: {
state: 'MA'
}
},
{
$addFields: {
stateAlias: 'MAS'
}
}
]);
결과적으로 다음과 같은 문서를 반환합니다.
$lookup
그 후 조회는 mongodb에서 널리 사용되는 집계 연산자 중 하나입니다. SQL 배경 출신이라면. 이것을 RDBMS의 JOIN Query와 연관 시킬 수 있습니다.
db.universities
.aggregate([
{ $match: { name: 'USAL' } },
{ $project: { _id: 0, name: 1 } },
{
$lookup: {
from: 'courses',
localField: 'name',
foreignField: 'university',
as: 'courses'
}
}
])
.pretty();
요약
요약하면, 이들은 MongoDB에서 가장 일반적이고 널리 사용되는 집계 연산자입니다. 다음 기사에서는 mongoDB 집계 연산자의 개념을 심도 있게 살펴볼 것입니다.
등록된 댓글이 없습니다.