Compose Transporter を使用して、DocumentDB から AWS の ElasticSearch インスタンスにデータを同期しています。一度同期した後、毎日増分データを同期するために、pipeline.js に次の collection_filters を追加しました。
// pipeline.js
var source = mongodb({
"uri": "mongodb <URI>"
"ssl": true,
"collection_filters": '{ "mycollection": { "createdDate": { "$gt": new Date(Date.now() - 24*60*60*1000) } }}',
})
var sink = file({
"uri": "file://mongo_dump.json"
})
t.Source("source", source, "^mycollection$").Save("sink", sink, "/.*/")
次のエラーが表示されます。
$ transporter run pipeline.js
panic: malformed collection_filters [recovered]
panic: Panic at 32: malformed collection_filters [recovered]
panic: Panic at 32: malformed collection_filters
goroutine 1 [running]:
github.com/compose/transporter/vendor/github.com/dop251/goja.(*Runtime).RunProgram.func1(0xc420101d98)
/Users/JP/gocode/src/github.com/compose/transporter/vendor/github.com/dop251/goja/runtime.go:779 +0x98
「gt」キーの値が単一の文字列トークンになるように collection_filters を変更すると (以下を参照)、不正な形式のエラーは消えますが、ドキュメントは取得されません。
'{ "mycollection": { "createdDate": { "$gt": "new Date(Date.now() - 24*60*60 * 1000)" } }}',
クエリの方法に根本的な問題があるかどうかを確認するために、単純な文字列フィルターを試してみましたが、うまくいきました。
"collection_filters": '{ "articles": { "createdBy": "author name" }}',
createdDate フィルターを渡すさまざまな方法を試しましたが、不正な形式のエラーが発生するか、データがありません。ただし、mongo シェルで同じフィルターを使用すると、期待どおりの出力が得られます。ここで質問する前に、ES と file as sink を試したことに注意してください。