MongoDB $ 의미(Aggregation)

Divan·2023년 1월 30일
2

Mongodb의 Aggregation을 사용하게 되면, $ 기호를 필수로 사용합니다.

참고 : MongoDoc 마침표 및 달러

1. "$ + < field >"

기본적으로 select시에는 origin필드에 접근하기 위한 방식이며, insert시에는 최상의 필드 및 중첩 필드에 사용한다.
아래 코드에서는 $id는 최상위 필드이고 location은 아래에 필들이 있어서 $를 사용 하지 않은거 같습니다.

db.books.insertOne( {
   "$id": "h1961-01",
   "location": {
      "$db": "novels",
      "$ref": "2007042768",
      "$inc": true
} } )

아래 코드에서 quantity에는 $가 붙지 않은것으로 보아, 굳이 사용을 안해도 되는거 같습니다.

db.sales.insertOne( {
   "$price": 50.00,
   "quantity": 30
} )

2. Stages

Aggregation을 사용하며 사용하면 Array형태의 pipeline을 만들어 순차적으로 쿼리가 가능합니다. 이때 스테이지의 기능에 $가 붙어 있습니다.
Aggregation Pipeline Stages 리스트 확인.

아래에서 $match, $group, $sum은 stage의 예약어이고, $name, $quantiy는 필드에 접근하기 위해서 사용한다.
아래 쿼리의 의미는 size가 medium인것들 중, name별로 수량(quantity)의 합계를 구한다.

db.orders.aggregate( [
   { $match: { size: "medium" }},
   { $group: { _id: "$name", totalQuantity: {$sum:"$quantity"} }}
] )

3. $$ 의미

$$은 MongoDB에서 사용되는 System Variables에 접근을 가능하게 해준다.

$$Root, $$CURRENT 이 두개는 자주 사용되며 이들은 mongo에서 가지고있는 환경 변수이다, Root 파이프라인을 시작단계의 Document를 의미하고, Current는 단계의 document이며 처음에는 root와 같은 상태이다.

System Variables 확인

아래와 같이 사용한다면, time으로 역정렬하고, 그것을 name 별로 item에 원래의 document 중 name에 해당하는것을 리스트로 만들어 줍니다.

db.orders.aggregate( [
   { $sort: {"time":-1}},
   { $group: { _id: "$name", items: {$push:"$$ROOT"} }}
] )
profile
하루 25분의 투자

0개의 댓글