web-dev-qa-db-ja.com

タイムスタンプクエリを使用したmongodumpコマンド

Mongodb Shellで以下のクエリを実行すると、前述のタイムスタンプの後に更新されたレコードの数が表示されます。

db.getCollection('oplog.rs').find({"ts":{"$gt":Timestamp(1582823397,2)}})

Mongodumpコマンドで同様のクエリを実行したいと思います。以下は私がそれをやろうとしている方法です。

query.json
{ "ts" : { "$gt" : Timestamp(1582823397,2) } }

mongodump -h 127.0.0.1:27018 -d local -c oplog.rs --queryFile=query.json -o - > D:/MongoDB/Backup/1582823
397_2_oplog.bson

上記のコマンドは機能せず、下記のエラーがスローされます。

Failed: error parsing query as Extended JSON: invalid JSON input. Position: 19. Character: T

Query.jsonはJSONルールに従っていないため、これは有効なようです。

Query.jsonファイルを次のように変更すると、.

query.json
{"ts":{"$gt":"Timestamp(1582823397,2)"}}

クエリはレコードを返しません。

上記のすべては、増分ダンプを提供することになっているシェルスクリプトの一部です。

スクリプトの参照は here から取得されます。参照 この質問 も。

MongoDBのインクリメンタルバックアップを取得する他の提案を受け入れます。

Wernfriedのコメントに応じて追加。

{
    "ts" : Timestamp(1582823446, 1),
    "t" : NumberLong(4),
    "h" : NumberLong(0),
    "v" : 2,
    "op" : "i",
    "ns" : "uis.healthCheck",
    "ui" : UUID("60d2d4de-48a3-46ec-a948-6fcb676ba52f"),
    "wall" : ISODate("2020-02-27T17:10:46.010Z"),
    "o" : {
        "_id" : 2,
        "status" : "Success2"
    }
}
1
Rahul Paryani

@WernfriedDomscheitと@prasad_のコメントで提供された提案によって、私が望んだことを達成することができました

今私のmongodumpコマンドは以下の通りです

mongodump -h 127.0.0.1:27018 -d local -c oplog.rs --query "{\"ts\":{\"\$gt\":{\"\$timestamp\":{\"t\":${TIMESTAMP_LAST_OPLOG_ENTRY},\"i\":${INC_NUMBER_LAST_OPLOG_ENTRY}}}}}" -o - > ${OUTPUT_DIRECTORY}/${TIMESTAMP_LAST_OPLOG_ENTRY}_${INC_NUMBER_LAST_OPLOG_ENTRY}_oplog.bson 2>> "$LOG_FILE"

「TIMESTAMP_LAST_OPLOG_ENTRY」と「INC_NUMBER_LAST_OPLOG_ENTRY」は、以前の「.bson」ファイルからフェッチされています。

ありがとう、Rahul Paryani

0
Rahul Paryani