Я использую Compose Transporter для синхронизации c данных из DocumentDB в экземпляр ElasticSearch в AWS. После однократной синхронизации c я добавил следующие коллекционные фильтры в конвейер. js для синхронизации c инкрементальных данных ежедневно:
// 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
Когда я изменяю collection_filters таким образом, чтобы значение ключа "gt" представляло собой однострочный токен (см. Ниже), искаженная ошибка исчезает, но не извлекает какой-либо документ:
'{ "mycollection": { "createdDate": { "$gt": "new Date(Date.now() - 24*60*60 * 1000)" } }}',
Чтобы проверить, является ли что-то принципиально неправильным с как я запрашиваю, пробовал простой строковый фильтр, и он хорошо работает:
"collection_filters": '{ "articles": { "createdBy": "author name" }}',
Я пробовал разные способы пропустить фильтр creatDate, но либо получал некорректную ошибку, либо данных не было. Однако тот же фильтр на оболочке mon go дает ожидаемый результат. Обратите внимание, что я пытался использовать ES и файл как приемник, прежде чем спрашивать здесь.