Compose Transporter выдает ошибку, когда для collection_filters задано syn c данные за текущий день из DocumentDB / MongoDB в файл / ElasticSearch - PullRequest
1 голос
/ 22 марта 2020

Я использую 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 и файл как приемник, прежде чем спрашивать здесь.

...