안녕하세요.
몽고 디비는 테이블 스키마 없이 JSON 데이터를 자유롭게 저장하고 쿼리 가능합니다. 몇가지 심화된 BSON 데이터 타입이 존재하고 aggregation등 활용도 높은 기능 지원합니다.
최근에는 기존 RDBMS에도 JSON 타입을 많이 지원하지만
MongoDB Atlas등 안정적인 서비스가 나오면서 실제 사용자와 서비스 사례가 늘어나고 있습니다.
find: 기존 YML 방식
- type: query
resource: mongodb
name: 전체조회
autoload: false
query:
collection: properties
find:
name:
$regex: "{{name}}"
find: queryFn 방식
param.key 그대로 값이 전달됩니다.
- type: query
resource: mongodb
autoload: false
query:
collection: properties
queryFn: |
properties
.find({
name: {
$regex: name
}
})
.toArray()
params:
- key: name
label: 업체 이름 검색
find: queryFn으로 복잡한 조건 추가
- type: query
resource: mongodb
autoload: false
query:
collection: properties
queryFn: |
const where = {}
if (_id) where._id = ObjectId(_id)
if (name) where.name = { $regex: name }
if (paid_at1 && paid_at2) {
where.paid_at = {
$gte: new Date(paid_at1),
$lte: new Date(paid_at2),
}
}
log('WHERE', where) /* log 찍는 용도 */
properties.find(where).toArray()
params:
- key: _id
- key: name
- key: paid_at
format: date
range: true
로그는 콘솔 로그에 표시됩니다.
aggregate: queryFn으로 추가
queryFn: |
const where = {}
properties.aggregate(
[
{
$addFields: {
last_transaction: {
$cond: {
if: {
$isArray: "$transactions",
},
then: {
$arrayElemAt: ["$transactions", -1],
},
else: "$$REMOVE",
},
},
},
},
{
$match: where,
},
]
).toArray()
참고
추출한 결과물은 responseFn
, responseRowFn
등으로 직접 수정 가능합니다.