project에 표현식 활용하기

7. project에 표현식 활용하기

* 산술표현식
 - $add       [a1 [, a2, a3 ... an]]
 - $substract [a1, a2]
 - $multiply  [a1 [, a2, a3 ... an]]
 - $divide    [a1, a2]
 - $mod       [a1, a2]

* 날짜 표현식
 - $year, $month, $week, $dayOfMonth, $dayOfWeek, $dayOfYear, $hour, $minute, $second

* 문자열 표현식
 - $substr
 - $concat
 

7.1. 산술표현식 예제 (add)

result = db.zip.aggregate([
    {'$group' : 
        {
            '_id' : '$state', 
            'max' : {'$max' : '$pop'}, 
            'min' : {'$min' : '$pop'} 
        } 
    },
    {'$project' : 
        {
            'maxmin' : {'$add' : ['$max', '$min']} 
        } 
    }
])
for record in result:
    print(record)

7.2. 날짜 표현식 예제 (year, month, day, hour, minutes, second, millisecond, dayOfYear, dayOfWeek, week)

#ISODate 라는 날짜 표현식으로 데이터 넣기
import datetime

db.test_db.insert_one(
    { 'item' : 'abc', 'price' : 10, 'quantity' : 2, 'date' : datetime.datetime.utcnow() }
)
#ISODate 라는 날짜 표현식으로 데이터 넣기
specific_date = datetime.datetime.strptime("2017-09-13T10:53:53.000Z", "%Y-%m-%dT%H:%M:%S.000Z")
db.test_db.insert_one(
    { 'item' : 'abc', 'price' : 10, 'quantity' : 2, 'date' : specific_date }
)
from pprint import pprint
# $project의 날짜 표현 operator 활용 예
result = db.test_db.aggregate([
    {'$project' : 
        {
            '_id' : 0,
            'year' : { '$year': '$date' },
            'month' : { '$month': '$date' },
            'day' : { '$dayOfMonth': "$date" },
            'hour' : { '$hour': "$date" },
            'minutes' : { '$minute': "$date" },
            'seconds' : { '$second': "$date" },
            'milliseconds' : { '$millisecond': "$date" },
            'dayOfYear' : { '$dayOfYear': "$date" },
            'dayOfWeek' : { '$dayOfWeek': "$date" },
            'week': { '$week': "$date" }
        }
    }
])
for record in result:
    pprint(record)

7.3. 문자열 표현식 예제

# $project의 $concat operator 활용 예

db.test_db.insert_one(
    { 'firstname' : 'Dave', 'lastname' : 'Lee' }
)

result = db.test_db.aggregate([
    {'$project' : 
        {
            '_id' : 0,
            'all_data' : { '$concat' : ['Full Name: ', '$firstname', ' ', '$lastname' ]}
        }
    }
])
for record in result:
    pprint(record)
# $project의 $substr operator 활용 예


db.test_db.insert_one(
    { 'fullname' : 'Dave Lee' }
)

result = db.test_db.aggregate([
    {'$project' : 
        {
            '_id' : 0,
            'first_name' : { '$substr' : ['$fullname', 0, 4 ]},
            'last_name' : { '$substr' : ['$fullname', 5, 7 ]}
        }
    }
])
for record in result:
    pprint(record)
from pprint import pprint

result = db.restaurant.find(limit=1)
for record in result:
    pprint(record)
# 레스토랑 데이터 예제, grades의 각 원소를 개별적인 원소가 된 문서로 변경
result = db.restaurant.aggregate([
    {'$unwind' : '$grades'},
    {'$limit' : 5}
])
for record in result:
    pprint(record)