티스토리 뷰
MongoDB Join 간단 예제
db.getCollection('collection1').aggregate([
{
$lookup: {
from: 'collection2',
localField: 'user_id', // tgm_fvrt_mgmt join key
foreignField: 'user_id', // tgb_user_mgmt join key
as: 'collection2_object'
}
},
{ $unwind:'$collection2_object' }, // $unwind used for getting data in object or for one record only
])
참고 - https://stackoverflow.com/questions/35813854/how-to-join-multiple-collections-with-lookup-in-mongodb
한 row에 표현하기
db.getCollection('collection1').aggregate([
{
$lookup: {
from: 'collection2',
localField: 'user_id', // collection1 join key
foreignField: 'user_id', // collection2 join key
as: 'collection2_object'
}
},
{
$replaceRoot: { newRoot: { $mergeObjects: [ '$$ROOT' , { $arrayElemAt: [ '$collection2_object', 0 ] } ] } } // Root Object + collection2_object array[0] merge
},
{ $project: { fromItems: 0, 'collection2_object' : 0 } }, // remove collection2_object object
])
참고 - https://docs.mongodb.com/master/reference/operator/aggregation/lookup/#pipe._S_lookup
두개 컬렉션 조인
db.getCollection('collection1').aggregate([
{
$lookup: {
from: 'collection2',
localField: 'user_id', // collection1 join key
foreignField: 'user_id', // collection2 join key
as: 'user_object'
}
},
{
$lookup: {
from: 'collection3',
localField: 'user_object.dept_cd', // user_object join key
foreignField: 'dept_cd', // collection3 join key
as: 'dept_object'
}
},
{ $unwind:'$user_object' }, // array[0] > object
{ $unwind:'$dept_object' }, // array[0] > object
{
$replaceRoot: { newRoot: { $mergeObjects: [ '$$ROOT', '$user_object', '$dept_object' ] } } // Root Object + user_object Object + dept_object Object
},
{ $project: { fromItems: 0, 'user_object' : 0, 'dept_object' : 0 } }, // remove user_object object dept_object
])
검색 및 페이징 처리
db.getCollection('collection1').aggregate([
{
$match: {
$and: [
{ 'user_id': { $eq: 'user1' } }, // search data
]
}
},
{ $sort: {_id: -1} }, // Latest first
{ $skip: 0 }, // skip
{ $limit: 10 }, // page size
{
$lookup: {
from: 'collection2',
localField: 'user_id', // collection1 join key
foreignField: 'user_id', // collection2 join key
as: 'user_object'
}
},
{
$lookup: {
from: 'collection3',
localField: 'user_object.dept_cd', // user_object join key
foreignField: 'dept_cd', // collection3 join key
as: 'dept_object'
}
},
{ $unwind:'$user_object' }, // Array[0] > Object
{ $unwind:'$dept_object' }, // Array[0] > Object
{
$replaceRoot: { newRoot: { $mergeObjects: [ '$$ROOT', '$user_object', '$dept_object' ] } } // Root Object + user_object Object + dept_object Object
},
{ $project: { fromItems: 0, 'user_object' : 0, 'dept_object' : 0 } }, // remove user_object, dept_object object
])
순차적으로 실행되는 듯
끘@#$!#$!@
'NodeJS' 카테고리의 다른 글
Nginx 사용시 웹소켓 에러 날때 해결방법 failed error during websocket handshake unexpected response code 400 (0) | 2019.05.29 |
---|---|
NginX Window OS 설치 및 세팅 (0) | 2019.05.28 |
소켓 통신 정리 (0) | 2019.05.16 |
Mongodb 페이징 query (0) | 2019.05.03 |
Mongodb 검색일(시작일start date ~ 종료일end date) query (0) | 2019.05.03 |
- Total
- Today
- Yesterday
- Docker
- 초원사진관
- 영광 여행
- 오라클 DB 링크
- 제주도 스쿠터 여행
- 윈드스크린
- kendo grid
- 남자 혼자 국내 여행
- 나래바이크
- 스쿠터 전국 일주
- vscode
- 군산 여행
- 베스파LX
- 송내역 카페
- 은파호수공원
- 보성 여행
- 국제반점
- 군산 가볼만한곳
- 송내 룸카페
- 스쿠터 여행
- 전국 일주 여행
- 남자 혼자 여행
- 송내역 룸카페
- 돌장갑
- 고흥 여행
- 리니지m
- 군산 게스트하우스
- 인터바이크
- 송내 카페
- 담양 여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |