데이터베이스 NoSQL 심화 (mongoDB) - aggregation 주요 명령 (project/limit)

3. aggregation 주요 명령 (project/limit)

  • _id, city 만 출력하되 5개만 가져오기 ($limit 과 함께 이해하기)
# find 로 5개만 가져오면서 컬럼을 확인해보고 시작합니다.
result = db.zip.find(limit=5)
for record in result:
    print(record)
{'_id': '01001', 'city': 'AGAWAM', 'loc': [-72.622739, 42.070206], 'pop': 15338, 'state': 'MA'}
{'_id': '01002', 'city': 'CUSHMAN', 'loc': [-72.51565, 42.377017], 'pop': 36963, 'state': 'MA'}
{'_id': '01005', 'city': 'BARRE', 'loc': [-72.108354, 42.409698], 'pop': 4546, 'state': 'MA'}
{'_id': '01007', 'city': 'BELCHERTOWN', 'loc': [-72.410953, 42.275103], 'pop': 10579, 'state': 'MA'}
{'_id': '01008', 'city': 'BLANDFORD', 'loc': [-72.936114, 42.182949], 'pop': 1240, 'state': 'MA'}

3.1. project

$project 기본 문법: { $project: { } } : <1 or true> Specify the inclusion of a field. _id: <0 or false> Specify the suppression of the _id field.
# _id, city 만 출력하기
result = db.zip.aggregate([
    {'$project' : {'_id' : 1, 'city' : 1} },
    {'$limit' : 5 }
])
for record in result:
    print(record)
{'_id': '01001', 'city': 'AGAWAM'}
{'_id': '01002', 'city': 'CUSHMAN'}
{'_id': '01005', 'city': 'BARRE'}
{'_id': '01007', 'city': 'BELCHERTOWN'}
{'_id': '01008', 'city': 'BLANDFORD'}

각 명령별로 데이터가 처리되고, 이는 다른 명령에 파이프라인으로 데이터가 넘어간다고 생각하자!

{'$project' : {'_id' : 1, 'city' : 1} } --> {'_id': '01001', 'city': 'AGAWAM'} 수백개
{'$limit' : 5 } --> 이 중에 5개
이해하고 실습하기
state 와 pop 만 3개 출력하기
result = db.zip.aggregate([
    {'$project' : { 'state' : 1, 'pop' : 1, '_id' : 0 } },
    {'$limit' : 3 }
])
for record in result:
    print(record)
{'pop': 15338, 'state': 'MA'}
{'pop': 36963, 'state': 'MA'}
{'pop': 4546, 'state': 'MA'}
# _id, city 만 출력하기
result = db.zip.aggregate([
    
    
    {'$project' : {'state' : 1, 'pop' : 1, '_id': 0} },
    
    
    {'$limit' : 3 }
    
    
    
])
for record in result:
    print(record)
{'pop': 15338, 'state': 'MA'}
{'pop': 36963, 'state': 'MA'}
{'pop': 4546, 'state': 'MA'}

3.2. limit

$limit 기본 문법: { $limit: }
# 전체 출력하려면 $project를 안쓰면 됩니다.
result = db.zip.aggregate([
    {'$limit' : 5 }
])
for record in result:
    print(record)
{'_id': '01001', 'city': 'AGAWAM', 'loc': [-72.622739, 42.070206], 'pop': 15338, 'state': 'MA'}
{'_id': '01002', 'city': 'CUSHMAN', 'loc': [-72.51565, 42.377017], 'pop': 36963, 'state': 'MA'}
{'_id': '01005', 'city': 'BARRE', 'loc': [-72.108354, 42.409698], 'pop': 4546, 'state': 'MA'}
{'_id': '01007', 'city': 'BELCHERTOWN', 'loc': [-72.410953, 42.275103], 'pop': 10579, 'state': 'MA'}
{'_id': '01008', 'city': 'BLANDFORD', 'loc': [-72.936114, 42.182949], 'pop': 1240, 'state': 'MA'}