MongoDB의 데이터를 CSV 형식으로 export 해보자.
코드는 아래와 같다.
# DB 이름
$db = 'test'
# Collection 이름
$collection = 'test'
# 추출하고자 하는 필드 지정 (공백이 없어야 함)
$field = 'Id,Name,Email'
## 쿼리용 정보 입력
# 사용자 ID (이메일 주소)
$email = 'test@test.com'
# 검색 시작 날짜 (YYYY-MM-DD 형태, 해당 날짜 포함)
$startDay = '2023-01-02'
# 검색 끝 날짜 (YYYY-MM-DD 형태, 해당 날짜 포함)
$endDay = '2023-05-15'
# CSV 파일 경로
$path = "mongodb_$email.csv"
# 쿼리 (JSON 형태로 입력)
# double quote(") 앞에 '\' 안붙이면 에러남
$query = '{\"UserId\": \"' + $email + '\", \"CreationTime\": {\"$gte\": \"' + $startDay + '\", \"$lte\" : \"' + $endDay + '\"}}'
mongoexport --db $db --collection $collection --query $query --type csv --fields $field --out $path --port 27017
중요한 것은 CSV 파일로 export 하는 경우 field를 반드시 지정해주어야 한다는 것이다.
이 필드 지정을 통해 원하는 field만 선택적으로 추출할 수 있다.
그리고 쿼리를 쓸 때 "
을 그냥 쓰면 안되고, 반드시 \"
형태를 사용해야 한다.
안그러면 에러남....
간혹 Document를 CSV 로 export 하려고 하는데, Embedded document인 경우가 있다.
하지만 CSV는 중첩된 형식을 지원하지 않는다...
A
라는 필드 안에 a
, b
, c
라는 필드가 있다고 가정하자.
이 경우 a
, b
, c
를 export하고 싶은 경우, field를 A.a
, A.b
, A.c
로 지정한다.
몇 번 중첩되든 상관 없는 것 같다.
위의 코드의 경우로 생각해보면,
...
$field = 'A.a,A.b,A.c'
...
이렇게 사용하면 된다.