mongodump를 사용하여 특정 날짜 범위에 일치하는 레코드를 덤프하려면 어떻게 해야 합니까?
mongodump 명령어를 사용하여 특정 날짜에 작성된 많은 레코드를 폐기하려고 합니다.레코드에는 MongoDB Date() 객체인 "ts" 필드가 포함됩니다.
mongodump는 -q 인수를 사용합니다.이 인수를 사용하여 덤프에 포함할 레코드를 선택하는 쿼리를 실행할 수 있습니다.안타깝게도 -q 인수는 JSON에서 제공해야 하며 순수 JSON에서 "이 날짜보다 작음, 이 날짜보다 더" 쿼리를 표현하는 방법은 명확하지 않습니다(보통 이러한 쿼리는 "새로운 날짜()" 생성자를 사용합니다).
팁이 있나요?{$date: unix-timestamp-in-milliseconds} 형식을 사용하려고 했지만 작동하지 않습니다.
내가 찾던 마법 주문을 풀었어
mongodump --query "{\"ts\":{\"\$gt\":{\"\$date\":`date -d 2011-08-10 +%s`000},\"\$lte\":{\"\$date\":`date -d 2011-08-11 +%s`000}}}"
@SimonWilison의 이스케이프 버전보다 더 사람이 읽을 수 있는 버전:
--query "{ time: { \$gt: new Date(1312959600000), \$lt: new Date(1313046000000) }}"
(계속 달러 기호를 이스케이프해야 합니다).
셸에 날짜를 생성하여 밀리초의 타임스탬프를 얻었습니다.예를 들어 다음과 같습니다.
> var targetDateStart = new Date(2011, 7, 10);
> var targetDateEnd = new Date(2011, 7, 11);
> targetDateStart.getTime();
1312959600000
> targetDateEnd.getTime();
1313046000000
MongoDB 3.2에서는--queryFile
옵션(mongodump
먼저 json 파일을 만듭니다.
//query.json
{"serverTime": {"$gte": ISODate("2016-01-30T16:00:00.000Z"), "$lt": ISODate("2016-01-31T16:00:00.000Z")}}
다음으로 mongodump를 사용합니다.
mongodump --db <dbName> --collection <collectionName> --queryFile query.json
간단 명료.
편집: 오탈자 수정
업데이트 추가:
mongodump --query
서포트하지 않음IsoDate
단, 받아들입니다.Date
밀리초 단위로 표시됩니다.~하듯이
date
OS X에서는 명령어가 다르게 동작합니다.date -d 2011-08-10 +%s
안 먹혀요.같은 문제가 발생했을 경우는, 메뉴얼을 읽거나,현재 시간(초)을 가져옵니다.
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
특정 시간(초):
date -j -f "%Y-%m-%d %H:%M:%S" "2014-01-01 00:00:00" "+%s"
이스케이프를 방지하려면 작은따옴표 버전을 사용합니다.
mongodump --query '{updated_at: { $gte: Date(1403280000000) } }'
이것으로 충분합니다. $date 쿼리에 대해 어떤 점이 효과가 없었습니까?:
mongodump --query {"ts":{$gt:{$date:178929000}}}
쿼리 주위에 작은 따옴표를 사용합니다.ISODate()가 동작하지 않는 것을 알았습니다.
mongodump --query '{"ts":{$gt:{$date:178929000}}}'
확장 JSON 포맷은 매뉴얼(https://docs.mongodb.com/database-tools/mongodump/)에서 확인할 수 있듯이 기능합니다.예를 들어:
--query '{ "timest": { "$gte": { "$date": "2020-08-19T00:00:00.000Z" } } }'
이 경우 14일 전에 작성된 엔트리를 쿼리하면 다음과 같은 bash 스크립트가 생성됩니다.
#!/bin/bash
date_now=`date +%s%3N`
date_2weeks_ago=$[date_now - 14 * 24 * 60 * 60 * 1000]
query=$(printf '{ createdAt: { $gte: Date(%d) } }' $date_2weeks_ago)
echo $query > query.json
mongodump \
--collection=data \
--queryFile=query.json
rm query.json
mongodump 버전: r4.0.12
언급URL : https://stackoverflow.com/questions/6996999/how-can-i-use-mongodump-to-dump-out-records-matching-a-specific-date-range
'programing' 카테고리의 다른 글
MAMP 설치에서 작업하는 WordPress permalinks 가져오기 (0) | 2023.03.23 |
---|---|
Wordpress 3.9 - 4.1 및 qTranslate 문제 (0) | 2023.03.23 |
React 오류 'Failed propType: 잘못된 프로펠러 'children'이 'Provider'에 제공되었습니다. 단일 ReactElement가 필요합니다.' (0) | 2023.03.23 |
TypeError dispatcher.useState는 React Hook을 사용할 때 함수가 아닙니다. (0) | 2023.03.23 |
wordpress에 부모 게시물이 있는 모든 자녀 사용자 지정 게시물을 가져오도록 permalink를 설정하려면 어떻게 해야 합니까? (0) | 2023.03.23 |