Как установить таймаут как false в поисковом запросе, чтобы избавиться от проблемы "идентификатор курсора не найден" Выполнение остановлено "в Mongolite(R)

Я получаю сообщение об ошибке "Идентификатор курсора не найден". Выполнено в Mongolite(R). Но я не знаю, как установить флаг тайм-аута как ложный в поисковом пакете монголита запроса в R.

1 ответ

Я думаю, что интерфейс не делает все публичным, но я разработал некрасивый хак, поскольку внутренняя функция mongo_collection_find имеет аргумент no_timeout:

mlite <- mongo()
iterate2 <- function (query = "{}", fields = "{\"_id\":0}", sort = "{}",skip = 0, limit = 0, no_timeout=FALSE) {
  check_col()
  cur <- mongo_collection_find(col, query = query, sort = sort, fields = fields, skip = skip, limit = limit, no_timeout=no_timeout)
  mongo_iterator(cur)
}
environment(iterate2) <- environment(mlite$iterate)
results <- iterate2(no_timeout=TRUE)$page()

Помимо установки no_timeout, код аналогичен mlite$iterate.

Это работает, хотя это и некрасиво (iterate2 автономен, больше не метод mlite).

И будьте осторожны, что в AFAIK нет контроля мусора для вашего курсора, поэтому, если вы действительно не будете осторожны, ваш курсор всегда исчерпан, вы только что допустили утечку памяти. Я думаю, вам придется перезапустить Монго, чтобы по-настоящему избавиться от вашего курсора.

Другие вопросы по тегам